.[ ČeskéHry.cz ].
riadok z .TXT suboru
Jdi na stránku 1, 2  Další
 
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> C / C++
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
koso



Založen: 28. 05. 2009
Příspěvky: 110

PříspěvekZaslal: 25. červen 2009, 19:44:22    Předmět: riadok z .TXT suboru Odpovědět s citátem

nikde som to nenasiel tak sa opytam tu.existuje v C nejaka funkcia ktora precita specificky riadok z .TXT suboru?

Naposledy upravil koso dne 26. červen 2009, 05:52:51, celkově upraveno 1 krát
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
OndraSej



Založen: 28. 07. 2007
Příspěvky: 767
Bydliště: Brandýs nad Labem

PříspěvekZaslal: 25. červen 2009, 19:58:10    Předmět: Odpovědět s citátem

Ve standardni knihovne ne, musis si ji sam napsat. Predpokladam, ze to co chces, je precist n-ty radek. To, co potrebujes je preskocit prvnich n-1 radku (protoze v .TXT nejsou nikde informace o tom, kde v souboru radky zacinaji) a vratit nasledujici.

Nicmene pokud te zajima vic nez jen jeden radek, je cteni souboru timhle zpusobem dost neefektivni a je lepsi to cist najednou nebo si soubor projit a poznamenat si, kde zacinaji/konci jednotlive radky.
_________________
http://trionteam.net
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Quiark



Založen: 29. 07. 2007
Příspěvky: 816
Bydliště: Chlívek 401

PříspěvekZaslal: 25. červen 2009, 20:08:20    Předmět: Odpovědět s citátem

Čtení řádku jde udělat pomocí streamů s funkcí getline:
kód:

string line;
getline(cout, line);


kde místo cout lze dosadit otevřený souborový stream.

Tohle načte řádek na aktuální pozici, takže je nutno jak říká ondrasej přečíst n-1 řádků a pak dostanu n. řádek.

EDIT: Teď jsem si všiml, že tazatel mluví o C. Můj příspěvek se týká jen C++ Smile
_________________
Mám strach


Naposledy upravil Quiark dne 25. červen 2009, 21:30:01, celkově upraveno 2 krát
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
nou



Založen: 28. 07. 2007
Příspěvky: 1050

PříspěvekZaslal: 25. červen 2009, 20:08:54    Předmět: Odpovědět s citátem

no existuje fgets(). ktora cita urcity pocet znakov az do konca riadku. ak je riadok dlhy tak skonci skor a dalsie citanie bude pokracovat odtial kde skoncilo.
_________________
Najjednoduchšie chyby sa najtažšie hľadajú.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
koso



Založen: 28. 05. 2009
Příspěvky: 110

PříspěvekZaslal: 25. červen 2009, 20:21:22    Předmět: Odpovědět s citátem

mal som na mysli nieco take ako je v GML(jazyk GAME MAKERu) v ktorom som robil asi pred 3 rokmi Embarassed
je tam funkcia file_read_real() ktora precita riadok textu a ulozi ho do premennej a potom je tam file_readln() ktora preskoci riadok
potreboval by som spravit to ze v texte vyhladam zadany retazec a precitam par riadkov pod nim pricom kazdy riadok ulozim do premennej.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Peta



Založen: 28. 07. 2007
Příspěvky: 154
Bydliště: V prvnim patre hned vedle koupelny.

PříspěvekZaslal: 25. červen 2009, 21:21:00    Předmět: Odpovědět s citátem

Pokud chceš analogii s GML, tak v C++ to uděláš tak, že přečteš celý řádek a uložíš do proměnný, pokud je to ten co Tě zajímá skončiš se čtením a proměnnou si zpracuješ. Pokud to není ten co chceš, prostě přečteš další řádek a uložíš do proměnné. Jak už tu bylo 2x řečeno, několik řádků prostě přeskočíš (n-1) a ten n-tý co tě zajímá si ponecháš. Pokud vím žádná speciální funkce na přeskakování řádků není. Ale to ani není potřeba, ty prostě ten řádek přečteš a ignoruješ jeho obsah. Ona ta funkce file_readln() stejně ten řádek přečte, jen ti to nikam neuloží takže tobě přijde že ho preskočí, protože po jejím skončení jsi na dalším řádku.
_________________
Když je Ti smutno, otoč se tváří ke slunci a všechny stíny padnou za Tebe.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Ladis



Založen: 18. 09. 2007
Příspěvky: 1537
Bydliště: u Prahy

PříspěvekZaslal: 25. červen 2009, 21:22:47    Předmět: Odpovědět s citátem

No a dostáváme se k tomu, Koso, tam jsi na to měl předudělané funkce od autora GM, teď ses vrhl na nízkoúrovňovější C, takže si je musíš napsat sám, nebo použít nějakou cizí knihovnu. Záleží, co je cílem tvého snažení - lepit cizí knihovny a tutoriály, nebo se naučit programovat víc do hloubky v daném jazyce (který ti IMHO nemůžu doporučit).
_________________
Award-winning game developer
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
VladR



Založen: 30. 07. 2007
Příspěvky: 1322
Bydliště: Greater New York City Area

PříspěvekZaslal: 26. červen 2009, 00:09:35    Předmět: Odpovědět s citátem

Na kyho frasa ti je zrovna C++ ? Vyser sa na C++ a chod do C#/XNA kombinacie a usetris kopec casu a nervov.

Jo, a BTW :
citace:
sa opitam
Rolling Eyes Twisted Evil Confused
No ale hned to zedituj. Ja teda vydrzim barsake hrubky, ale toto je podobny brutus, ako "syt" (ako vysivat - len nemam makcene instalnute, tak to hned nevidno).
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
koso



Založen: 28. 05. 2009
Příspěvky: 110

PříspěvekZaslal: 26. červen 2009, 07:08:45    Předmět: Odpovědět s citátem

uz som to vyriesil Wink .ak treba vymazte tento topic.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
VladR



Založen: 30. 07. 2007
Příspěvky: 1322
Bydliště: Greater New York City Area

PříspěvekZaslal: 26. červen 2009, 08:33:19    Předmět: Odpovědět s citátem

Tu nejde o tento topic, ale o princip. Dnes je dead simple najst na nete knihy o C++, nemusis davat stvrtinu priemerneho platu na knihu, ako kedysi.

PDFiek je take kvantum, ze aj ked nejakej knihe nerozumies, je vysoko nepravdepodobne, ze by si mal podobny problem pri hocakej z dalsich 15 knih.

Samozrejme to chce cas, nemozes chciet vysledky hned, ako pri GM. Potom si zober nejaky engine, ktory ma vizualne editory, kde low-level kodenia vela nemas a nemusis sa drbat s otvaranim suborov.

Na druhej strane, ak chces byt koderom, tak low-level veci proste ovladat musis - ale aj tak je lepsie zacat s C#, tam az tolko low-level zasekov nemas.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
MD



Založen: 29. 07. 2007
Příspěvky: 437
Bydliště: Praha

PříspěvekZaslal: 26. červen 2009, 08:59:11    Předmět: Odpovědět s citátem

Ja stale s oblibou pouzivam scanf na cteni jednoduchych textovych konfiguraku. Dulezite je umet precist balast do konce radku plus onen konec radku abyste mohli preskocit chyby, komentare ci prazdne radky:
kód:
fscanf(file,"%*[^\n]\n"); // readln

Vlastni cteni muze vypadat takto:
kód:
if (fscanf(file, "%259[a-zA-Z_0-9] = \"%259[^\n\"]", buff, buff2) == 2) {
  // precetl jsem radek ve formatu klic = "nejaka hodnota"
  // pricemz to hlida limity delky klice i hodnoty (259) aby nepretekly buffery
  // v buff mam klic a v buff2 mam hodnotu klice
}
fscanf(file,"%*[^\n]\n"); // readln

_________________
- play with objects - www.krkal.org -
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
if.then



Založen: 13. 04. 2008
Příspěvky: 579

PříspěvekZaslal: 26. červen 2009, 10:32:45    Předmět: Odpovědět s citátem

ja s oblibou pouzivam fgetc() v cyklu do-while.
_________________
For guns and glory, go to www.ceske-hry.cz.
For work and worry, execute VC++.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Peta



Založen: 28. 07. 2007
Příspěvky: 154
Bydliště: V prvnim patre hned vedle koupelny.

PříspěvekZaslal: 26. červen 2009, 13:16:52    Předmět: Odpovědět s citátem

MD napsal:

kód:
if (fscanf(file, "%259[a-zA-Z_0-9] = \"%259[^\n\"]", buff, buff2)


OT:
Jsem ani nevěděl že jde do scanf hodit regexpy, je to někde popsané? (MSDN?).
_________________
Když je Ti smutno, otoč se tváří ke slunci a všechny stíny padnou za Tebe.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
JohnyDog



Založen: 17. 08. 2007
Příspěvky: 66

PříspěvekZaslal: 26. červen 2009, 14:41:15    Předmět: Odpovědět s citátem

Peta napsal:

OT:
Jsem ani nevěděl že jde do scanf hodit regexpy, je to někde popsané? (MSDN?).

Bohuzel ne regexpy, tohle ([]) je soucast format stringu, je to popsane ve standardu

citace:
[
Matches a nonempty sequence of characters from a set of expected characters
(the scanset).246)
If no l length modi?er is present, the corresponding argument shall be a
pointer to the initial element of a character array large enough to accept the
sequence and a terminating null character, which will be added automatically.
If an l length modi?er is present, the input shall be a sequence of multibyte
characters that begins in the initial shift state. Each multibyte character is
converted to a wide character as if by a call to the mbrtowc function, with
the conversion state described by an mbstate_t object initialized to zero
before the ?rst multibyte character is converted. The corresponding argument
shall be a pointer to the initial element of an array of wchar_t large enough
to accept the sequence and the terminating null wide character, which will be
added automatically.
The conversion speci?er includes all subsequent characters in the format
string, up to and including the matching right bracket (]). The characters
between the brackets (the scanlist) compose the scanset, unless the character
after the left bracket is a circum?ex (^), in which case the scanset contains all
characters that do not appear in the scanlist between the circum?ex and the
right bracket. If the conversion speci?er begins with [] or [^], the right
bracket character is in the scanlist and the next following right bracket
character is the matching right bracket that ends the speci?cation; otherwise
the ?rst following right bracket character is the one that ends the
speci?cation. If a - character is in the scanlist and is not the ?rst, nor the
second where the ?rst character is a ^, nor the last character, the behavior is
implementation-de?ned.

_________________
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
MD



Založen: 29. 07. 2007
Příspěvky: 437
Bydliště: Praha

PříspěvekZaslal: 26. červen 2009, 16:28:57    Předmět: Odpovědět s citátem

jj, v MSDN to vysvetlene je. Jen je trosku hloupe, ze ta pomlcka (a-z) je "the behavior is implementation-defined." (cituju standard vyse). Ale pak se to cteni da napsat trosicku jinak, treba pro klice pouzit bezne %s (to pak precte text ohraniceny mezerami taby ci \n) a taky to bude fungovat.

Mne se tohle scanf libi, ze uz pak nemusim nic sam slozite parsovat.
_________________
- play with objects - www.krkal.org -
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Zobrazit příspěvky z předchozích:   
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> C / C++ Časy uváděny v GMT + 1 hodina
Jdi na stránku 1, 2  Další
Strana 1 z 2

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra
Nemůžete odpovídat na témata v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete hlasovat v tomto fóru


Powered by phpBB © 2001, 2005 phpBB Group


Vzhled udelal powermac
Styl "vykraden" z phpBB stylu MonkiDream - upraveno by rezna