C-problem s datotekama

poruka: 8
|
čitano: 1.033
|
moderatori: XXX-Man, vincimus
1
+/- sve poruke
ravni prikaz
starije poruke gore
15 godina
protjeran
offline
C-problem s datotekama

Večer svima!

Imam jedno veeeeliko pitanje vezano uz upravljanje datotekama u C programskom jeziku.

Nego, recimo imam neki programcic, koji otvara datoteku, recimo bla.txt, i zapisuje svaki put na njezin kraj neki broj recimo.

E sad, mene zanima kako da kad otvaram tu datoteku, ispišem točno određenu liniju iz te datoteke?

 

RECIMO DATOTEKA.TXT:

broj x je 1

broj x je 3

broj x je 5.4

broj x je 87

...

 

I sad ja bi htio recimo pročitat SAMO 3. liniju znači da je x=5.4.

 

Je li to moguće?

I ako je, kako?

Hvala puno na odgovorima!

#include <cstdio> int main () { printf ("1F Y0U C4N R34D TH15 Y0U 5H0
Moj PC  
0 0 hvala 0
14 godina
neaktivan
offline
Re: C-problem s datotekama

Pa meni pada na pamet korištenje pattern-a unutar scanf-a, dakle:

 

char string[250];

int brojac = 0;

 

while(!foef(f))

{

fscanf(f, "\n%[^\n]", string);

 

if(++brojac == LINIJA_KOJA_TEBI_TREBA)

printf("%s", string); // Ili mozes string rastaviti ili sta vec god hoces s njim

 

EDIT: Jbg, neznam koristit ovaj stil "kod", cilo vrime mi baca nesto, pa imas ovo kao "neoblikovani kod" {#}

Divide et Impera! ( :
Poruka je uređivana zadnji put ned 1.5.2011 23:39 (BolestanUm).
14 godina
neaktivan
offline
C-problem s datotekama

Ako trebas citati N-tu liniju, tada ucitaj N-1 liniju prije. Nisam siguran koji je tocno najbolji nacin, ali evo jedan.

 

Dakle :

FILE *file = fopen( filename, "r" );

for ( int i = 0; i+1 < N; ++i )

  fscanf( file, "%*[^\n]\n" );

 

fscanf( file, "%[^\n]\n", buffer );

Vjerovatno se moze i s fgets ili tako necim, ali i ovo bi trebalo raditi ...

 
0 0 hvala 1
15 godina
protjeran
offline
Re: C-problem s datotekama

@Bolestan_Um

Upravo tako sam i mislio, nekim brojacem...

Znaci nema nacina tipa fscanf (f[1], "%d",&x);

Ili?

 

 

EDIT: f predstavlja neki fajl koji je prije otvoren naredbom f=fopen("fajl.txt","r+");

 

#include &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;cstdio&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt; int main () { printf (&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;quot;1F Y0U C4N R34D TH15 Y0U 5H0
Poruka je uređivana zadnji put ned 1.5.2011 23:44 (beno101).
14 godina
neaktivan
offline
Re: C-problem s datotekama

S obzirom na datoteku koju si opisao na pocetku koja sadrži tekst "x = NESTO", nemozes s tim fscanf(f, "%d", &x). Ovo bi ti prošlo kada bi ti se datoteka sastojala na način da se svaki broj bez ikakvog teksta i drugih znakova nalazi u svakom retku datoteke.

Npr,: datoteka.txt
1
21
213
21
24
65
...
i onda s fscanf(f, "%d", &x); to prolazi jer ti on onda čita broj po broj. 

Divide et Impera! ( :
15 godina
protjeran
offline
Re: C-problem s datotekama
BolestanUm kaže...

..

No, kad bi bilo tako kako je gore, onda bi provjeravao stringove, tj. znakove u stringu.

Dok ne dođem do =, onda ostatak s atoi pretvorim u int ili float ili još bolje double i ostatak znate...

#include &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;cstdio&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt; int main () { printf (&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;quot;1F Y0U C4N R34D TH15 Y0U 5H0
14 godina
neaktivan
offline
C-problem s datotekama

binarnim (direktnim, neformatiranim) datotekama tj. blokovskim čitanjem bi odjednom mogao pristupiti bilo kojem zapisu u datoteci. pogledaj primjere za fwrite, fread, fseek...

Poruka je uređivana zadnji put pon 2.5.2011 0:02 (TracerCPP).
Moj PC  
0 0 hvala 2
14 godina
neaktivan
offline
Re: C-problem s datotekama
beno101 kaže...
BolestanUm kaže...

..

No, kad bi bilo tako kako je gore, onda bi provjeravao stringove, tj. znakove u stringu.

Dok ne dođem do =, onda ostatak s atoi pretvorim u int ili float ili još bolje double i ostatak znate...

 

Mozes tu pretvorbu ostvariti i pomocu sscanf() naredbe, dakle:

char string[200]; // pretpostavimo da je oblika "tekst = broj"
int broj;

sscanf(string, "%*[^=]=%d", &broj);

Nisam provjerio, al mislim da bi ovo prošlo. "%*[^=]=%d" znaci: Čitaj mi sve znakove (%) osim znaka = ([^=]), ali mi to nemoj spremati (*); zatim učitaj jednako (=) i nakon toga mi učitaj broj (%d) i spremi u varijablu 'broj'.

Divide et Impera! ( :
Poruka je uređivana zadnji put pon 2.5.2011 15:50 (BolestanUm).
1
Nova poruka
E-mail:
Lozinka:
 
vrh stranice