Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Citanje iz tekstualnog fajla - Pitanje???

[es] :: C programiranje :: Citanje iz tekstualnog fajla - Pitanje???

[ Pregleda: 963 | Odgovora: 10 ]

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Mix5
Milos Djuric
Jagodina - BG

Član broj: 14282
Poruke: 330
217.24.27.*

Sajt: www.boom-soft.com


Profil

icon Citanje iz tekstualnog fajla - Pitanje???16.06.2006. u 23:42

Imam funkciju koja prima pokazivac na fajl a vraca pokazivac na string koji u glavnom programu koristim za smestanje u strukturu od koje pravim listu. Fajl se sastoji iz vise redova.

Funkcija treba da se pozove onoliko puta koliko fajl ima redova teksta. Moje pitanje je kako da pri sledecem pozivu funkcije ona cita sedeci red teksta i kako da znam koliko puta vrsim pozivanje funkcije. Znam da trebam da citam podatke iz fajla dok ne dodjem do kraja fajla ali ne znam kako to da napisem.

Code:

char *CitajIzFajla(FILE *file)
{
     char *inf;
     inf = malloc(MAX_DUZ);
     fgets(inf, MAX_DUZ, file);
     return inf;
}
16.06.2006. u 23:42 

z@re
Zarko Bulatovic
Split, Spinut

Član broj: 29849
Poruke: 414
*.cmu.carnet.hr.

Sajt: www.freebsd.org


Profil

icon Re: Citanje iz tekstualnog fajla - Pitanje???17.06.2006. u 01:12
Kad otvoris datoteku preko fopen();, kreira se lokator koji sluzi za pozicioniranje lokacije za iscitavanje i upisivanje. Taj lokator mozes rucno micat pomocu fseek(); funkcije. Uglavnom, kad fgets iscita jednu liniju, automatski se lokator mice na drugu liniju. Tvoju funckiju mozes zvat na nacin :

Code:

char *linija;
if(!feof(ulazna)) linija = CitajIzFilea(ulazna);



[12:33am] <alek> deca od 3-5 godina prvi spoznaju ljubav bozju :)


Q: HSP56 Micromodem nece da radi kompjuter ga prepozna a kad treba da se konektujem nece ne daje ni znaka zivota. u cemu je problem.

A: Crko mozda od grmljavine mozda od spanaca. Uglavnom baci ga u WC solju jako povuci vodu. Skupi 5e i uzmi drugi i ne postuj temu na pogresno mesto.
17.06.2006. u 01:12 

Mix5
Milos Djuric
Jagodina - BG

Član broj: 14282
Poruke: 330
217.24.27.*

Sajt: www.boom-soft.com


Profil

icon Re: Citanje iz tekstualnog fajla - Pitanje???17.06.2006. u 01:55
Mislis

Code:

char *linija;
while(!feof(ulazna)) linija = CitajIzFilea(ulazna);


Meni je ovako logicnije.
17.06.2006. u 01:55 

Mali Misha
Mihajlo Anđelković

Član broj: 79396
Poruke: 313
*.powernet.bg.

ICQ: 195487525


Profil

icon Re: Citanje iz tekstualnog fajla - Pitanje???17.06.2006. u 06:49
Čitanje fajla liniju po liniju... i pamćenje. Preporučujem da funkcija koja uzima liniju vraća pokazivač na NULL ukoliko se došlo do kraja fajla.

Code:
char* getline(FILE *fp)
{
    // ... pokusaj citanja fajla i pisanje null na kraj ucitanog stringa

    if(feof(fp) && <string prazan>) return 0;

    // ...
}

int main(void)
{
    char *line;
    FILE *fp;

    // ...

    while( line = getline(fp) )
    {
        // ...
    }

    // ...

}

Inače ako štediš na memoriji, bolje bi bilo da napraviš bafer maksimalne dužine u funkciji koja poziva getline i onda u getline prvo učitaš liniju u taj bafer. Dužina učitavane linije će biti poznata u trenutku kada završiš sa njenim čitanjem. Nakon toga napraviš novi string tačno te dužine plus 1, zbog NULL na kraju, i prepišeš bafer u taj string.
Dim di dam...
17.06.2006. u 06:49 

tosa

Član broj: 1811
Poruke: 1265
*.ubisoft.com.cn.



Profil

icon Re: Citanje iz tekstualnog fajla - Pitanje???17.06.2006. u 08:30
Ja bih ti savetovao da staviš pokazivač na string kao argument funkcije, kao i dužinu istog, a da
menadžment memorije radiš u ostatku programa - mnogo je razloga za ovakav pristup.
Soylent green: over 6 billion served!
17.06.2006. u 08:30 

z@re
Zarko Bulatovic
Split, Spinut

Član broj: 29849
Poruke: 414
*.cmu.carnet.hr.

Sajt: www.freebsd.org


Profil

icon Re: Citanje iz tekstualnog fajla - Pitanje???17.06.2006. u 19:44
Citat:
Mix5: Mislis

Code:

char *linija;
while(!feof(ulazna)) linija = CitajIzFilea(ulazna);


Meni je ovako logicnije.


Ma da, typo. Treba while.
[12:33am] <alek> deca od 3-5 godina prvi spoznaju ljubav bozju :)


Q: HSP56 Micromodem nece da radi kompjuter ga prepozna a kad treba da se konektujem nece ne daje ni znaka zivota. u cemu je problem.

A: Crko mozda od grmljavine mozda od spanaca. Uglavnom baci ga u WC solju jako povuci vodu. Skupi 5e i uzmi drugi i ne postuj temu na pogresno mesto.
17.06.2006. u 19:44 

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 2829
*.nat-pool.po.sbb.co.yu.

Jabber: xfiles@elitesecurity.org
Sajt: www.antivari.com


Profil

icon Re: Citanje iz tekstualnog fajla - Pitanje???17.06.2006. u 20:05
Pazi kad sam juce 2 min gledao u cemu je razlika izmedju te dve linije (tj. da vidim na sta se
primedba odnosi), i nisam uspeo da uocim da je na jednom mestu 'if' a na drugom 'while'... :)

FREEWARE
Di rečnik, v1.0.058 (srp-eng/eng-srp priručni rečnik)
http://www.antivari.com
17.06.2006. u 20:05 

n1tr0
Student of Software Engineering
Cortanovci / NS

Član broj: 55279
Poruke: 342
80.93.231.*

Sajt: blog.bloggernauts.net


Profil

icon Re: Citanje iz tekstualnog fajla - Pitanje???17.06.2006. u 23:05
Citat:
X Files: Pazi kad sam juce 2 min gledao u cemu je razlika izmedju te dve linije (tj. da vidim na sta se
primedba odnosi), i nisam uspeo da uocim da je na jednom mestu 'if' a na drugom 'while'... :)

Auuuuu...
Pa dobar si ti...
Ja sam proveo oko 10min i jos krenuo da kucam poruku da pitam koja je razlika, a kada sam citirao... :)
http://n1tr0.bloggernauts.net - n1tr0's blog
http://blog.bloggernauts.net - My Tech (B)log
http://www.google.com - pre postavljanja glupih pitanja
17.06.2006. u 23:05 

z@re
Zarko Bulatovic
Split, Spinut

Član broj: 29849
Poruke: 414
*.cmu.carnet.hr.

Sajt: www.freebsd.org


Profil

icon Re: Citanje iz tekstualnog fajla - Pitanje???18.06.2006. u 02:54
I meni je trebalo jedno par puta usporedbe da skuzim svoj lapsus ;)


[12:33am] <alek> deca od 3-5 godina prvi spoznaju ljubav bozju :)


Q: HSP56 Micromodem nece da radi kompjuter ga prepozna a kad treba da se konektujem nece ne daje ni znaka zivota. u cemu je problem.

A: Crko mozda od grmljavine mozda od spanaca. Uglavnom baci ga u WC solju jako povuci vodu. Skupi 5e i uzmi drugi i ne postuj temu na pogresno mesto.
18.06.2006. u 02:54 

Mix5
Milos Djuric
Jagodina - BG

Član broj: 14282
Poruke: 330
217.24.27.*

Sajt: www.boom-soft.com


Profil

icon Re: Citanje iz tekstualnog fajla - Pitanje???19.06.2006. u 04:44
Ovo mi je samo kod za testiranje, nebi da kacim kod onoga sto pravim, ima mnogo.

Zasto mi ne radi citanje iz fajla... ne mogu vise da se mucim...

Code:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

#define MAX_DUZ 200

typedef struct elementListe
{
        char *infixizraza;
        struct elementListe *next;
}       ElementListe;

typedef struct lista
{
        struct elementListe *prvi;
        struct elementListe *poslednji;       
}       Lista;

ElementListe *NapraviElement(char *infix)
{
             ElementListe *e;
             e = malloc(sizeof(ElementListe));
             e -> next = NULL;
             e -> infixizraza = malloc(strlen(infix)+1);
             strcpy(e -> infixizraza, infix);
             return e;
}

Lista *NapraviListu()
{
      Lista *l;
      l = malloc(sizeof(Lista));
      l-> prvi = NULL;
      l-> poslednji = NULL;
      return l;
}

void DodajUListu(Lista *l, ElementListe *e)
{
     if(!l->prvi) l->prvi = e;
     else      l->poslednji->next = e;
     l->poslednji = e;
              
}

void IspisiListu(Lista *l)
{
     ElementListe *pom = l->prvi;
     while(pom){puts(pom->infixizraza);pom = pom->next;}
}

int DuzinaListe(Lista *l)
{
     int br=0;
     ElementListe *pom = l->prvi;
     while(pom){br++;pom = pom->next;}
     return br;
}

void UpisiUFajl(Lista *l, char imefajla[1000])
{
     FILE *fajl;
     fajl = fopen(imefajla,"a+");
     ElementListe *pom = l->prvi;
     while(pom){
     fprintf(fajl,"%s\n",pom->infixizraza);
     pom = pom->next;
     }
     fclose(fajl);
}

void CitajIzFajla(Lista *l, char imefajla[1000])
{
     FILE *fajl;
     char *inf;
     if ((fajl = fopen(imefajla,"r")) == NULL)
     {
     printf("Fajl ne postoji !\n");return 0;
     }
     fajl = fopen(imefajla,"r");
     while(feof(fajl))
     {
     inf = malloc(MAX_DUZ);
     fgets(inf, MAX_DUZ, fajl);
     DodajUListu(l,NapraviElement(inf));
     }  
}

main () 
{
        Lista *lista;
        int a=0;
        char ime[1000];
        
        lista = NapraviListu();
        printf("%d\n", DuzinaListe(lista));
        
        printf("Unesite ime fajla: ");scanf("%s", ime);
        CitajIzFajla(lista,ime);
  
        IspisiListu(lista);
        printf("%d", DuzinaListe(lista));

        system("PAUSE");
        
}
19.06.2006. u 04:44 

Igor Gajic
Novi Sad

Član broj: 93194
Poruke: 92
*.ADSL.neobee.net.



Profil

icon Re: Citanje iz tekstualnog fajla - Pitanje???19.06.2006. u 10:40


Code:

     if ((fajl = fopen(imefajla,"r")) == NULL)
     {
     printf("Fajl ne postoji !\n");return 0;
     }


     fajl = fopen(imefajla,"r");       //!!!!!!!!!!!!!!!!!!!!!!


Zar vec nisi otvorio fajl?

I

Code:

 while(feof(fajl))


bi trebalo da bude

Code:

 while(!feof(fajl))
19.06.2006. u 10:40 

[es] :: C programiranje :: Citanje iz tekstualnog fajla - Pitanje???

[ Pregleda: 963 | Odgovora: 10 ]

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.