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

Citanje iz tekstualnog fajla?

[es] :: C/C++ programiranje :: Citanje iz tekstualnog fajla?

[ Pregleda: 2135 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Andrija91
Andrija Petrovic
Ucenik
Pirot

Član broj: 219479
Poruke: 45
91.148.91.*



Profil

icon Citanje iz tekstualnog fajla?30.11.2009. u 19:00 - pre 174 meseci
Code:

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

int main(int argc, char *argv[])
{
  char z;int niz[100],i=0,j;
  FILE *f;
  if((f=fopen("zad20.dat","r"))!=NULL)
  while(!feof(f))
  {
   i+=1;
   z=getc(f);
   printf("%d\n",(int)z);
  }
  for(j=1;j<=i;j++)
   printf("%d",niz[j]);
  system("PAUSE");    
  return 0;
}

U fajlu su upisani u jednom redu 12345678. Zbog cega mi posle konverzije char u int stampa brojeve 49,50,51...56. Znam da su to ascii kosdovi od tih brojeva ali zbog cega stampa njih a ne brojeve 123345678?

Takodje pokusao sam da citam po jedan znak iz fajla u int promenljivu ali nikako nisam uspeo?

[Ovu poruku je menjao X Files dana 30.11.2009. u 20:24 GMT+1]
 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4901
*.dynamic.sbb.rs.

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: Citanje iz tekstualnog fajla?30.11.2009. u 19:30 - pre 174 meseci
Koju ces strategiju citanja koristiti zavisi pre svega od potreba. Ovde imas post u kome je jedna od ideja citanja cele linije (CITANJE DATOTEKE LINIJA PO LINIJA, ISPIS NA EKRAN, UPIS U DRUGU DATOTEKU)
http://www.elitesecurity.org/p2219727


Sto se tice tvog konkretnog pitanja, pri citanju karakter po karakter, oduzimanjem mozes dobiti ocekivani rezultat:
Umesto:
printf("%d\n",(int)z);
Stavi:
printf("%d\n",z-'0');

Sledeci logiku kojom si zapoceo tvoj program, uz izmenu koju sam ti naveo, verovatno ces imati i karekter 'viska', koji je zapravo karakter kraja datoteke. Zato je najbolje u petlji samo formirati niz, a ispis izmestiti van petlje i to jedan karakter manje od brojaca "i".
 
Odgovor na temu

Andrija91
Andrija Petrovic
Ucenik
Pirot

Član broj: 219479
Poruke: 45
109.106.237.*



Profil

icon Re: Citanje iz tekstualnog fajla?30.11.2009. u 19:56 - pre 174 meseci
Ok hvala! Znam kako da citam celu liniju znam da citam i po jedan karakter, samo ne znam kako da iscitavam po jedan znak i smestam u int, medjutim i ovo resenje je prihvatljivo!

Jos jedno pitanje:kako bi se iscitavao fajl da ima i brojeve i slova?
 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4901
*.dynamic.sbb.rs.

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: Citanje iz tekstualnog fajla?30.11.2009. u 20:19 - pre 174 meseci
Stavi samo:
printf("%c\n",z);

To ce ispisivati odmah i brojeve i slova onako kako ocekujes.
 
Odgovor na temu

Andrija91
Andrija Petrovic
Ucenik
Pirot

Član broj: 219479
Poruke: 45
91.148.83.*



Profil

icon Re: Citanje iz tekstualnog fajla?30.11.2009. u 20:46 - pre 174 meseci
Nije problem u ispisivanju nego u smestanju sadrzaja fajla u odgovarajucu promenljivu,int,char.
 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4901
*.dynamic.sbb.rs.

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: Citanje iz tekstualnog fajla?30.11.2009. u 20:58 - pre 174 meseci
Sve zavisi sta zelis konkretno da postignes programom. Pokazi konkretan problem, pa cemo ti reci sta je najoptimalnije.

Fajl moze biti proizvoljne velicine i obicno je suvisno praviti kopiju celog fajla u memoriji, smestanjem u neki niz char-ova.

Ipak, postoji vise nacina kako bi to postigao, a najjednostavnije je sa fread() funkcijom, sto je dato u primeru.

Code:

// Primer iz Borlandovog "C Runtime Library" helpa
#include <string.h>
#include <stdio.h>

int main(void)
{
   FILE *stream;
   char msg[] = "this is a test";
   char buf[20];

   if ((stream = fopen("DUMMY.FIL", "w+"))
       == NULL)
   {
      fprintf(stderr, "Cannot open output file.\n");
      return 1;
   }

   /* write some data to the file */
   fwrite(msg, strlen(msg)+1, 1, stream);

   /* seek to the beginning of the file */
   fseek(stream, SEEK_SET, 0);

   /* read the data and display it */

   fread(buf, strlen(msg)+1, 1, stream);
   printf("%s\n", buf);

   fclose(stream);
   return 0;
}


A mozes i (u skladu s tvojim primerom) da citas karakter po karakter i smestas u neki niz dovoljne velicine, inkrementirajuci brojac posle svakog pojedinacnog citanja. Velicinu niza mozes odrediti prethodnim citanjem velicine fajla i dinamicki ga kreirati.


Ono sto vidim je da te zbunjuje int i char u kontekstu citanja fajlova. Da ne detaljisem, po jeziku C, to su prakticno identicni tipovi podataka, jer se char realizuje preko inta, ali to je neka druga tema. Dovoljno je da imas char niz, a kasnije ga mozes transformisati u sta god zelis, pod uslovom da poznajes strukturu fajla.


 
Odgovor na temu

[es] :: C/C++ programiranje :: Citanje iz tekstualnog fajla?

[ Pregleda: 2135 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

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