Avatar billede telep Nybegynder
20. november 2003 - 11:27 Der er 21 kommentarer og
2 løsninger

Læse tekstfil

Hej,

Jeg sidder og koger over noget kode jeg skal lave.

Jeg har en tekstfil, der indeholder:
"string" "int" "int" "int "int"
"string" "int" "int" "int "int"
"string" "int" "int" "int "int"
"string" "int" "int" "int "int"
..
..

Jeg skal læse hver enkelt string og int ind i mit program og når den sidste "int" på en linie er læst skal jeg køre noget i mit program. Så med anden linie osv.
Avatar billede arne_v Ekspert
20. november 2003 - 11:46 #1
Åben filen med fopen, while løkke som bruger fgets til at læse en
linie og sscanf til at parse items med.
Avatar billede telep Nybegynder
20. november 2003 - 11:49 #2
Jeg har følgende kode:

{
        int data[4], dato, tid, antalPladser, antalResv, next;
        string titel;
        char navn;
        ifstream ins;
        ins.open("forestilling.txt");
        do
        {
                ins.get(navn);
                titel = navn;
                for (int i = 0; i < 4; i++)
                {
                        data[i] = next;
                        ins.get(next);
                }
                for (int i = 0;i < 4; i++)
                        cout << data[i] << " ";
        } while (! ins.eof());

Jeg tror ikke helt jeg forstår hvad du skriver!
Avatar billede arne_v Ekspert
20. november 2003 - 11:52 #3
Jeg snakkede C - du er ovre i meget C++.

Hvis der ikke er mellemrum i navn kan du bruge:

ins.open("forestilling.txt");
while(!ins.eof())
{
  ins >> navn >> data[0] >> data[1] >> data[2] >> data[3];
}
Avatar billede telep Nybegynder
20. november 2003 - 11:53 #4
Ja c++
Avatar billede telep Nybegynder
20. november 2003 - 12:04 #5
Det er tæt på men det virker sgu ikke helt!

Jeg kan ikke helt gennemskue hvad f..... der går galt.
Der står følgende i tekstfilen:

MissSophie 31224 2000 3 36

Og der kommer følgende ud i programmet:

MissSophie 1213912 1213912 1213912 1213912

???
Avatar billede telep Nybegynder
20. november 2003 - 12:11 #6
Any clues????
Avatar billede arne_v Ekspert
20. november 2003 - 12:17 #7
Hvordan ser din kode ud nu ?
Avatar billede telep Nybegynder
20. november 2003 - 12:19 #8
{
      int data[4], dato, tid, antalPladser, antalResv, next;
        string titel, navn;
        ifstream ins;
        ins.open("forestilling.txt");

        while(!ins.eof())
        {
        ins >> navn >> data[0] >> data[1] >> data[2] >> data[3];
        }
        cout << navn << " " << data[0] << " " << data[1] << " " << data[2] << " " << data[3];
}
Avatar billede conrad Nybegynder
20. november 2003 - 12:26 #9
prøv at udelade navn ins >> data[0] >> data[1] >> data[2] >> data[3]; en gang
Avatar billede telep Nybegynder
20. november 2003 - 12:31 #10
så kommer de samme tal bare ud...
1213912 1213912 1213912 1213912
Avatar billede segmose Nybegynder
20. november 2003 - 12:39 #11
Prøv sådan istedet:
    {
      int data[4], dato, tid, antalPladser, antalResv, next;
        string titel, navn;
        ifstream ins;
        ins.open("forestilling.txt");

        while(!ins.eof())
        {
        ins >> navn >> data[0] >> data[1] >> data[2] >> data[3];
        cout << navn << " " << data[0] << " " << data[1] << " " << data[2] << " " << data[3];
        }
}

skriver den en eller 2 linier?
Avatar billede telep Nybegynder
20. november 2003 - 12:55 #12
to linier, den første er rigtig, den anden er forkert!
Avatar billede telep Nybegynder
20. november 2003 - 12:56 #13
hvad fanden er egentlig forskellen på det to koder???
Jeg kan sgu ikke se det!
Avatar billede telep Nybegynder
20. november 2003 - 12:58 #14
hvordan får jeg den sidste forkerte linie væk?
Avatar billede arne_v Ekspert
20. november 2003 - 12:58 #15
segmose flyttede bare udskriviningn ind i løkken så hver
linie bliver udskrevet i.s.f. kun den sidste.
Avatar billede arne_v Ekspert
20. november 2003 - 12:58 #16
Du har med 99% sandsynelighed en tom linie til sidst i input-filen.

Fjern den !
Avatar billede telep Nybegynder
20. november 2003 - 13:00 #17
korrekt!
Avatar billede segmose Nybegynder
20. november 2003 - 13:30 #18
Hvis den kan forvirres af en tom linie er indlæsningen ikke særlig rubust, specielt synes jeg at når navn ikke overskrives er den helt gal. Der bør laves et check for at se om hver >> lykkedes, her kan jeg dog ikke hjælpe da jeg ikke bruger streams (endnu).
Avatar billede arne_v Ekspert
20. november 2003 - 14:05 #19
Man kan teste på !ins og !ins.eof() efter hver operation.

Men hvis man skal have fuld styr på input så er >> nok ikke det
rigtige.
Avatar billede arne_v Ekspert
30. november 2003 - 22:59 #20
lukketid ?
Avatar billede arne_v Ekspert
30. november 2003 - 22:59 #21
og et svar
Avatar billede telep Nybegynder
30. november 2003 - 23:42 #22
segmose: kommer du med et svar så vi kan lukke her?
Avatar billede segmose Nybegynder
01. december 2003 - 08:56 #23
svar!
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





White paper
Tidsbegrænset kampagne: Overvejer du at udskifte eller tilføje printere i din forretning? Vi kan tilbyde én eller flere maskiner gratis