Avatar billede ulrikhjul Nybegynder
01. april 2006 - 23:09 Der er 6 kommentarer og
1 løsning

parsing af en linie.

Hej.
Jeg prøver på at pille nogle bestemte ting ud af en *.txt fil der ser ud som følger:

Brugernavn: tullepige
Email adresse: tullepige@hotmail.com
Pris: 185,00 DKK ( x 2)
Finn Jensen
østrevej 3a 2th
8000 Århus C
75659797

Jeg skal bruge:

tullepige
tullepige@hotmail.com
185.00
2
Finn Jensen
østrevej 3a 2th
8000
Århus C
75659797

Og alle skal bruges som strenge senere i programmet pånær 185.00 og 2 - de skal være som int's.

Mit problem er i linien med "Pris: 185,00 DKK ( x 2)"
jeg kan godt få "185,00" pillet ud, og jeg kan også godt pille "2" ud, men bare ikke samtidig!

Hvordan sætter jeg disse to funks sammen?

Koden;
*******************************************

Pris = strstr (linie,"Pris: ");
                   
      if( Pris == linie )
    {
        Pris += 6;
       
        int len;   
        char *p1,*p2;
        p1 = Pris;
               
               
        while((p2=strstr(p1,"DKK"))!=NULL)
        {
            len = p2-p1;
            strncpy(Pris,p1,len);
            Pris[len]='\0';
                   
        }
                       
        cout << Pris << ";" << endl; //AntalVarer << ";" << endl;
                   
      }

AntalVarer = strstr (linie,"( x ");                                               
      if( AntalVarer )
    {
        AntalVarer += 4;               
                               
        int len;   
        char *p1,*p2;
        p1 = AntalVarer;

        while((p2=strstr( p1, ")" ))!=NULL)                           
        {
            len = p2-p1;
            strncpy(AntalVarer,p1,len);
            AntalVarer[len]='\0';
        }
                               
        cout << AntalVarer << ";" << endl;
               
    }
Avatar billede arne_v Ekspert
01. april 2006 - 23:18 #1
den nemme løsning var jo at tage en kopi af linien og så bruge den ene
metode på originalen og den anden på kopien ...
Avatar billede arne_v Ekspert
01. april 2006 - 23:22 #2
men det kan gøres fixere

hvis formatet er fast og prisen er i hele kroner så

    char line[] = "Pris: 185,00 DKK ( x 2)";
    int price,count;
    sscanf(line,"Pris: %d,00 DKK ( x %d)",&price,&count);
Avatar billede arne_v Ekspert
01. april 2006 - 23:41 #3
og decimaler må kunne klares med

    int tmp1,tmp2;
    double realprice;
    ...
    sscanf(line,"Pris: %d,%d DKK ( x %d)",&tmp1,&tmp2,&count);
    realprice = tmp1 + tmp2/100.0;
Avatar billede ulrikhjul Nybegynder
01. april 2006 - 23:44 #4
hold k... hvor er det godt arne!
...det er da noget lettere med den smule kode....
Super, og det virker :-) 
smider du et svar?
Avatar billede ulrikhjul Nybegynder
01. april 2006 - 23:46 #5
jep, men det er ganske fint at det bare fungerer til heltal - jeg tror det rækker.... men altid godt at vide en anden gang :-)
Avatar billede arne_v Ekspert
01. april 2006 - 23:50 #6
svar
Avatar billede ulrikhjul Nybegynder
01. april 2006 - 23:50 #7
Tak for hjælpen....
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