Avatar billede simonsenpq Nybegynder
22. oktober 2002 - 10:28 Der er 9 kommentarer og
1 løsning

Læse tekstfil i C

Hvordan læser jeg en tekstfil linje for linje og lægger værdierne ind i et todimensionalt array? Et kodeeksempel i C ville være rart :-)
Avatar billede soreno Praktikant
22. oktober 2002 - 10:45 #1
hvis du med 2d array mener et par bestående af linienummer og tekst kunne følgende nok være til inspiration:
#include <stdio.h>

struct Par
{
      int linieNummer;
      char indhold[256];
};

int main(int argc, char **argv)
{
  Par par[1234];
  int index = 0;
  FILE *fil;
  fil = fopen("input.txt", "rt");

  while(!feof(fil))
  {
      par[index].linieNummer = index;
      fgets(par[index].indhold, 256, fil);
      index++;
  }
  fclose(fil);

  for(int i=0;i<index;i++)
  {
      printf("[%i]%s", par[i].linieNummer, par[i].indhold);
  }

  return 0;
}
Avatar billede simonsenpq Nybegynder
22. oktober 2002 - 10:59 #2
Nu er jeg jo ikke nogen haj, så det der forstår jeg ikke helt...

Jeg har en tekst fil med en værdi på hver linje. KundeId, Navn, Adresse og så et KundeId igen på linje 4 osv.

2d arrayet skal vel laves som et char array(?) som
char kundeArray[100][3];

Hvad skal jeg bruge? fscanf? Kan kun finde ud af at læse én linje :-(
Avatar billede soreno Praktikant
22. oktober 2002 - 11:18 #3
brug følgende til at læse én linie fra fil:
char buffer[256];
fgets(buffer, 256, fil);
Avatar billede soreno Praktikant
22. oktober 2002 - 11:18 #4
hvis ovenstående bliver kald flere gange læses næste linie og næste linie..
Avatar billede simonsenpq Nybegynder
22. oktober 2002 - 14:55 #5
Jeg behøver vist lidt mere hjælp... Nu har jeg kæmpet med det et par timer og har ikke fundet andre eksempler på nettet.

Kan man skrive noget i retning af
char kundeArray[100][3];

for (i=0; i<100; i++)
{
for (j=0; j<3; i++)
    fgets(kundeArray[i][j], 256, filnavn);
}

MEN det virker ikke... Og hvad betyder de 256?
Avatar billede soreno Praktikant
22. oktober 2002 - 15:22 #6
jeg tror du er nødt til at bruge en struct for at få det til at spille:
#include <stdio.h>

struct Kunde
{
      char nummer[256];
      char navn[256];
      char adresse[256];
};

int main(int argc, char **argv)
{
  Kunde kunde[100]; //array med plads til 100 kunder
  int index = 0;
  FILE *fil;
  fil = fopen("kunder.txt", "rt");

  if(!fil)
    return -1;

  while(!feof(fil))
  {
      fgets(kunde[index].nummer, 256, fil); //256 er "max number of bytes to be read."
      fgets(kunde[index].navn, 256, fil);
      fgets(kunde[index].adresse, 256, fil);
      index++;
  }
  fclose(fil);

  //nu indeholder index det antal Kunder der er læst.
  for(int i=0;i<index;i++)
  {
      printf("kundenummer: %s", kunde[i].nummer);
      printf("navn: %s", kunde[i].navn);
      printf("adresse: %s\n", kunde[i].adresse);
  }

  return 0;
}

kunder.txt indeholder:
1
Byggemand bob
legovej 123
2
Teletubby
vejnummer 432
3
Palleib
Vejnummer 312

output bliver:
kundenummer: 1
navn: Byggemand bob
adresse: legovej 123

kundenummer: 2
navn: Teletubby
adresse: vejnummer 432

kundenummer: 3
navn: Palleib
adresse: Vejnummer 312
Avatar billede soreno Praktikant
22. oktober 2002 - 15:24 #7
du kan evt. kigge her:
http://www.eksperten.dk/spm/273494

det ser ikke ud til du er alene, er det en skoleopgave ?
Avatar billede soepro Nybegynder
23. oktober 2002 - 14:10 #8
Det ville være rart hvis folk anvendte søge-funktionen en gang i mellem - det her spørgsmål har vi besvaret rigtig mange gange.

Prøv f.eks. http://www.eksperten.dk/find.phtml?words=skriv+l%E6s+fil+tekst&method=or&sort=score&catid=4

Første spørgsmål her (http://www.eksperten.dk/spm/256557), beskriver præcis hvordan du skal gøre.
Avatar billede simonsenpq Nybegynder
23. oktober 2002 - 14:31 #9
Tro det eller ej - jeg har faktisk søgt rigtigt meget igennem inden jeg stillede dette spørgsmål. Spørgsmålet og svaret du henviser til fatter jeg bare ikke en meter af...
Avatar billede simonsenpq Nybegynder
23. oktober 2002 - 14:42 #10
Har lavet et lille tillægsspørgsmål på http://www.eksperten.dk/spm/274057
Håber, du vil hjælpe :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester