Avatar billede ulja03 Nybegynder
23. maj 2004 - 12:33 Der er 9 kommentarer og
1 løsning

Læse tekst + tal fra fil ?

Jeg skal læse nedenstående linie ind fra filen "test.txt"

Peter  ,4,5,6,7

og putte de forskellige ord /tal ind i en struct som denne:

struct element {
  char name[15];
  int  tal1;
  int  tal2;
  int  tal3;
  int  tal4;
};

Hvordan gør jeg det? Har forsøgt med en stor sekventiel tilgang, hvor jeg bruger en:

  while (fscanf(fp,"%c",&c) == 1) osv. 

men da kan jeg jo blot læse char's og ikke int's som også skal bruges. Har også prøvet med en og ftell() og getc() men da får jeg fortsat kun char's ind. Laver jeg et typecast på tallene (indlæst som char) til (int) så får jeg jo desværre en forkert tal-værdi.
Avatar billede arne_v Ekspert
23. maj 2004 - 12:42 #1
Prøv:

while (fscanf(fp,"%[^,],%d,%d,%d,%d",elm.name,&elm.tal1,&elm.tal2,&elm.tal3,&elm.tal4) == 1)
Avatar billede ulja03 Nybegynder
23. maj 2004 - 12:50 #2
ok - hvad gør

%[^,]

i forhold til elm.name?
Avatar billede arne_v Ekspert
23. maj 2004 - 12:53 #3
Den gør at man læser ind i elm.name indtil man møder er komma.
Avatar billede ulja03 Nybegynder
23. maj 2004 - 13:06 #4
Umiddelbart sker der intet. Du får lige lidt mere af den egentlige kode og kan måske se hvorfor jeg ikke får noget ud med printf()...:

struct hs_element {
  char name[15];
  int  score;
  int  colors;
  int  pins;
  int  max_guesses;
};


void prn_highscore(void) {

  FILE              *fp;
  struct hs_element  hs_list;
 
  fp = fopen("Highscore_file.txt","r");

  while (fscanf(fp,"%[^,],%d,%d,%d,%d",hs_list.name,&hs_list.score,&hs_list.colors,&hs_list.pins,&hs_list.max_guesses) == 1)
    printf("%s,%d,%d,%d,%d",hs_list.name, hs_list.score, hs_list.colors, hs_list.pins, hs_list.max_guesses );

 
  fclose(fp);
}
Avatar billede ulja03 Nybegynder
23. maj 2004 - 13:11 #5
jeg kylede while-løkken ud og så spiller det...

tak for hjælpen. smid bare en svar på.
Avatar billede ulja03 Nybegynder
23. maj 2004 - 13:17 #6
Kan koden for i øvrigt relativt let udvides så der indlæses flere linier i .txt filen?
Avatar billede arne_v Ekspert
23. maj 2004 - 13:23 #7
svar
Avatar billede arne_v Ekspert
23. maj 2004 - 13:24 #8
Umiddelbart skulle jeg mene at du med while løkken sagtens kan håndtere flere linier
Avatar billede ulja03 Nybegynder
23. maj 2004 - 13:29 #9
ok - takker.
Avatar billede dilleberg Nybegynder
23. maj 2004 - 18:48 #10
fscanf returnerer "the number of fields successfully converted and assigned".

while løkken skal altså modificeres til
while (fscanf(...) == 5)
{
  // ...
}

db
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