Avatar billede rellin Nybegynder
22. oktober 2002 - 12:09 Der er 4 kommentarer og
1 løsning

EOF

Jeg skal indlæse en fil med både int og strenge

hvordan indlæser jeg dette indtil der ikke er mere i filen ?

f.eks. har vi

12 støvler 450 500 300
13 røjsere 300 498 999

Hvert White space markerer en ny int eller string!
Avatar billede arne_v Ekspert
22. oktober 2002 - 12:34 #1
Hvis du kender formatet og der altid er det samme i en
bestemt søjle, så er det jo nemt:

while not eof do begin
  read int
  read string until space
  read int
  read int
  read int
end

Hvis det kan komme helt blandet, så bliver du nødt til at læse alt ind
som strenge og så konvertere det til int hvis muligt.

Og undskyld pseudo-koden oven for, men du skrev ikke om
du ønskede C stdio eller C++ fstream kode og det er ret
forskelligt.
Avatar billede mbulow Nybegynder
22. oktober 2002 - 17:00 #2
Det her lille stykke kode er lavet med to simple begrænsninger:
1) Dine strenge indeholder mellem 1 og 255 tegn
2) Alle linjerne har samme format altså (int streng int int int)

fscanf skal returnere antallet at variable der har fået tildelt en værdi.
Dvs. så længe det lykkedes skal den altid returnere 5, ellers er der noget galt med en linjes indhold, ellers også er vi nået til enden af filen



#include <stdio.h>

int main()
{
    int a;
    char b[256];
    int c;
    int d;
    int e;
    FILE *pFile;
   
    if((pFile = fopen("C:\\Temporary\\Input.txt", "r")) != 0)
    {
        while(fscanf(pFile, "%d %s %d %d %d", &a, b, &c, &d, &e) == 5)
            printf("%d %s %d %d %d\n", a, b, c, d, e);
       
        fclose(pFile);
    }
   
    return 0;
}
Avatar billede rellin Nybegynder
22. oktober 2002 - 17:17 #3
Ja den sidste kan jeg godt lide den er sådan lidt alternativ
men problemet er også jeg jeg f.eks. skal kunne bruge en string med 2 ord i... dvs. at når jeg skal indlæse filen skal denne måske med adskilles af : tegnet  dvs. en slags "tokenizer"... det mener jeg man gør sådan *(^:)
Avatar billede rellin Nybegynder
22. oktober 2002 - 17:18 #4
hovsa... der kom en stjerne for meget med!
Avatar billede mbulow Nybegynder
22. oktober 2002 - 18:08 #5
Yep yep :)

udskift while(...) med:
  while(fscanf(pFile, "%d:%[^:]:%d:%d:%d", &a, b, &c, &d, &e) == 5)

Så indlæser den linjer hvor de enkelte tokens er adskilt med :'er
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