Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 10 odgovora
  • 5.174 pregleda

Najnovija ↓

Citanje odredjene linije iz fajla 02.04.2005. u 18:25 · pre 262 meseca #1
Imam ovaj code za citanje sadrzaja fajla:

Code:


#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

main()
{  
    int buffer[100];
        
    FILE *f;
    
    f = fopen ("c:\\fajl.txt", "r");

   while (fgets (broj, 100, f) != NULL)
   { 
   printf("%s", broj);
   }    
   
   getch();
}



Ovaj mi code cita sadrzaj fajla od pocetka do kraja i prikazuje ga na ekran, medjutim nije mi jasno kako da kada procita sve linije u fajlu, ispise odredjenu liniju u fajlu koju ja zelim?

P.S. Kada mi ispise odredjenu liniju u fajl, tu liniju, odnosno sadrzaj te linije treba da mi spremi u odredjenu varijablu ali posto ce se samo brojevi nalaziti u sadrzaju fajla, da li bez obzira na to moram korisiti funkciju atoi() da konvertujem sadrzaj u cijeli broj?

Hvala.
Potpis
AleXandar
Re: Citanje odredjene linije iz fajla 02.04.2005. u 18:51 · pre 262 meseca #2
Moje rjesenje:
Code:

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

int main()
{
    int i,k=1;
    FILE *dat;
    char string[100];
    printf("Unesite broj linije\n");
    scanf("%d",&i);
    dat=fopen("datoteka.txt","r");
    while(k<i)
        if (fgetc(dat)=='\n') ++k;
    for (i=0;;++i)
    {
        string[i]=fgetc(dat);
        if (string[i]==EOF || string[i]=='\n')
        {
            string[i]='\0';
            break;
        }
    }
    printf("%s",string);
    fclose(dat);
    system("pause");
    return 0;
}

Ovaj program cita znakove iz datoteke ,i kad naidje na znak '\n' povecava se brojac
za jedan sve dok ne dostigne vrijednost zeljene linije teksta.Kada dodje do linije
cita znak po znak iz datoteke i kopira ih u znakovni niz 'string'.Prestaje da kopira znakove
kada naidje na znak '\n' ili EOF.
Poslije program samo ispise sadrzaj niza na ekran.(To je sto je!)
Sto se tice drugog pitanja,naravno da nije potrebno koristiti funkciju itoa,
jer kad dodjes do odredjene linije(na gore objasnjeni nacin) onda samo koristis funkciju fscanf().NA primjer:
Code:

fscanf(dat,"%d",&a);

Nadam se da sam pomogao!
Pozdrav
Potpis
[email protected]
Re: Citanje odredjene linije iz fajla 10.04.2005. u 13:05 · pre 262 meseca #3
Pozdrav,
Ovaj tvoj code mi je pomogao, medjutim ne treba mi bas ovako pa sam ja malo pokusao da modifikujem pa mi nije uspjelo i evo me ovdje.
Naime, treba mi modifikovati onaj gore code koji sam napisao.
Ovaj code koji si ti napisao, on cita odredjenu liniju koju mu ja zadam, medjutim onaj gore moj code on procita CIJELI fajl i ispise sadrzaj cijelog fajla. E umjesto da on ispise sadrzaj cijelog fajla, meni treba da ispise odredjenu liniju. Uglavnom, treba da se nalazi jedna varijabla sadrzaj[100], i code koji cita fajl do kraja != NULL i ide redom, liniju 0 snimi u sadraj[0], liniju 1 snimi u sadrzaj[1] i sve tako do kraja != NULL. I onda ja mogu ispisat odredjenu liniju koja mi treba npr. printf("%s", sadrzaj[2]); a cijeli sadrzaj mogu ispisati petljom. Eto toliko nadam se da cete mi pomoci.
Potpis
AleXandar
Re: Citanje odredjene linije iz fajla 10.04.2005. u 13:31 · pre 262 meseca #4
Necu ti modifikovati nikakav kod ali to se u praksi radi ovako:

Code:

// *netestirano* za Borland C++ Builder !!!
TStringList *SL = NULL;
try
{
   try
   {
      SL = new TStringList;
      SL->LoadFromFile( "C:\\file.txt" );

      // ovde mozes da koristis SL kako zelis, na primer:
      
      // SL->Count, je broj ucitanih linija 
      // SL->Strings[ Count-1 ], je poslednja linija
      // SL->Strings[ 0 ], je prva linija
      // SL->Strings[ 0 ][ 1 ], je prvo slovo prve linije
      // SL->Strings[ 0 ][ SL->Strings[ 0 ].Length() ], je zadnje slovo prve linije
      
      // ShowMessage( SL->Strings[ 1 ] ); // ispisuje drugu liniju
      
      // itd ...
      // Posle opet mozes da izmenis neke linije pa ih opet snimis:

      SL->SaveToFile( "C:\\file.txt" );
   }
   catch ( const Exception &e )
   {
      // doslo je do neke greske!!!
   }
}
__finally
{
   if ( SL )
      delete SL;
}


Sve ovo moze da se uradi i sa STL std::string klasom.

Ogranicavati *pamet* programa na fiksni buffer od 100 karaktera je
besmislica sa stanovista kvalitetnog programiranja.
Re: Citanje odredjene linije iz fajla 10.04.2005. u 13:33 · pre 262 meseca #5
Kao sto rekoh, kod je iz glave - netestiran:

Citat:

// SL->Strings[ Count-1 ], je poslednja linija


treba:

Citat:

// SL->Strings[ SL->Count-1 ], je poslednja linija


Verovatno ima nekih grescica.
Re: Citanje odredjene linije iz fajla 10.04.2005. u 16:59 · pre 262 meseca #7
Verovatno si u pravu,

onda mu modifikuj tvoj kod tako da napravis novu f-ju
koja kao argument uzima broj linije koju treba ispisati.
Re: Citanje odredjene linije iz fajla 10.04.2005. u 18:30 · pre 262 meseca
izmenjeno 1 put, poslednji put Buffy 10.04.2005. u 18:35
  1. Buffy10.04.2005. u 18:35zapis iz teksta poruke
#8
Code:

#include <stdio.h>
#include <malloc.h>
int main()
{
    char *tekst[100];
    FILE *dat=fopen("datoteka.txt","r");
    int l,k;
    for (l=0;l<=99;l++)
    {
        tekst[l]=(char*)malloc(100);
        k=0;
        while(5>3)
        {
            tekst[l][k]=fgetc(dat);
            if (tekst[l][k]=='\n' || tekst[l][k]==EOF) {tekst[l][k]='\0';break;}
            k++;
        }
        if (tekst[l][k]==EOF) break;
    }
    printf("%s\n",tekst[2]);    
    system("pause");
    return 0;
}

Nadam se da ovo trazis!
Jedina mana ovog programa sto baca memoriju!
Na primjer ako linija ima 3 znaka ostalih 97 bajtova ostaje ne iskoristeno.Isto tako
ako linija ima vise od 100 znakova program moze da pukne.
Dakle,program bi se mogao unaprijediti!
Pozdrav!!!:)
Potpis
[email protected]
Re: Citanje odredjene linije iz fajla 10.04.2005. u 18:32 · pre 262 meseca #9
Treba mi C code, znaci jos jednom da ponovim, treba mi da liniju 1. ispise u npr. sadrzaj[1], liniju 2. u sadrzaj[2] i sve tako do kraja fajla a na kraju da ja mogu ispisati liniju koju ja zelim ovako: printf("Sadrzaj linije 5= %d", sadrzaj[5]);
Puno hvala.
Potpis
AleXandar
Re: Citanje odredjene linije iz fajla 11.04.2005. u 10:34 · pre 262 meseca #11
Citat:
Buffy: Pa to sam i napisao u proslom postu!



Ja kada sam citao, tog posta nije bilo, radilo se o par minuta :-).

P.S. Pogledaj vrijeme pisanja mog proslog, i tvog predproslog posta.

Sad je sve ok, puno hvala.
Potpis
AleXandar
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme