Avatar billede Lasse Novice
30. oktober 2003 - 00:41 Der er 13 kommentarer og
1 løsning

Hurtig indlaesning fra fil

Jeg skal laese en fil, der indeholder information om noget geometri. Jeg ved om filen:
1) Den er ascii baseret.
2) Linierne er en af foelgende
  - v 0.0 2.34444 4.6666
  - f 1 23 444
  - # Dette er en kommentar
  - g navn

3) Der findes antal af linierne:
  - v linie - ukendt
  - f linie - ukendt
  - # linie - Skal ikke ind i memory
  - g linie - 1 stk

Hver linie definerer en identitet, noget der skal overfoere til en instans af typen ? i c. Hvordan laeser jeg dette ind i memory paa den aller hurtigste maade?
Avatar billede arne_v Ekspert
30. oktober 2003 - 00:47 #1
pseudo kode:

while(der er mere i filen)
{
  læs en linie ind i en streng
  switch(første bogstav)
  {
      case 'v':
          parse resten af tallene og gem dem
          break;
      case 'f':
          parse resten af tallene og gem dem
          break;
      case '#':
          /* nothing */
          break;
      case 'g':
          gem den
    }
}
Avatar billede Lasse Novice
30. oktober 2003 - 00:49 #2
Jeg ved at MFC(hvilket jo er c++) modefoerer stort overhead. Skal jeg ned og bruge stdio lowlevel funktioner, eller er STL hurtig nok? Eller er der noget der er endnu hurtigere?

Hvad ville vaere det smarteste at goere? Er der nogle Tricks from the master programmers, jeg skal kende til her?
Avatar billede Lasse Novice
30. oktober 2003 - 00:50 #3
arne_v>> Ok, undskyld jeg ikke forklarer mig nok. Nej, det jeg savner er en super hurtig maade(hvilke funktioner) til at laese filen, ikke selve logikken i laesningen.
Avatar billede arne_v Ekspert
30. oktober 2003 - 00:52 #4
Du kan bruge C IO (stdio.h):

feof til at teste på EOF
fgets til at læse linier med
sscanf til at parse tallene ud af linien med

Du kan bruge C++ IO (fstream):
  .eof() til at teste på EOF
  >> til at læse både bogstaver og tal
Avatar billede arne_v Ekspert
30. oktober 2003 - 00:53 #5
Jeg tvivler meget på at det vil gøre den store fordel om det er det ene eller
det andet.
Avatar billede Lasse Novice
30. oktober 2003 - 00:56 #6
Hvad er hurtigst? C eller C++ loesningen? Eller det er maaske det samme. Det er fordi, jeg har proevet at lave en parser, men jeg kan slet ikke hamle op med hastigheden hvormed perl parser den samme tekst. Eftersom perl er skrevet i c, saa burde det vaere muligt. Jeg har kigget lidt paa sourcekoden fra perl til unix, men de bruger selvfoelgelig et library skrevet til unix.
Avatar billede arne_v Ekspert
30. oktober 2003 - 00:59 #7
Jeg er overbevist om at C IO vil være en lille smule hurtigere end C++ IO.
Avatar billede arne_v Ekspert
30. oktober 2003 - 01:00 #8
Men betyder de 25% eller 50% noget ?
Avatar billede arne_v Ekspert
30. oktober 2003 - 01:05 #9
Hvis performance var kritisk så var de vel slet ikke gemst som tekst !?
Avatar billede Lasse Novice
30. oktober 2003 - 15:54 #10
Hvis performance var kritisk så var de vel slet ikke gemst som tekst !?>>
Hehe, ja, det kan du have ret i. Desvaerre er det bare en standard vi foelger, og kan derfor ikke rigtig goere noget ved det :-(

Et sidste spg. Jeg har aldrig programmeret noget stort i c/c++. Du skriver f.eks. at sscanf kan bruges til at parse tallene ud med. Hvis jeg nu skulle proeve at knibe alt performance ud, ville det saa vaere hurtigere med en pointer, at loebe karakter for karakter igennem hele filen, bruge itoa(for at konvertere taellene til int - og noget andet for double) idet jeg har fundet et tal element, eller er det ligesaa hurtugt/hurtigere at bruge sscanf?
Avatar billede arne_v Ekspert
30. oktober 2003 - 15:58 #11
Det bør være en lille smule hurtigere at parse selv fordi du sparer
parsningen af format strengen i sscanf.

Men hvor stor forskellen er må afhænge både af compiler og dig.
Avatar billede Lasse Novice
30. oktober 2003 - 17:41 #12
ok, tak for hjaelpen, jeg tror jeg kan lave noget nu. Hvis du lige er soed at svare, kan jeg give dig pointene
Avatar billede arne_v Ekspert
30. oktober 2003 - 17:43 #13
ok
Avatar billede arne_v Ekspert
30. oktober 2003 - 17:43 #14
skriv her hvis noget af implementationen driller
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