Gå til innhold

Anbefalte innlegg

Jeg driver å programmerer litt på en filparser som skal parse vedlagte fil.

Hva er enkleste måten å gjøre det på? Akkurat nå driver jeg å tuller med stringbuffer og splitting på linjeskift etc.

 

Det må da finnes noe enklere?

 

Bruker java men pseudokode kan vel også gå greit. Evt bare et konsept :)

 

-C-

Lenke til kommentar
Videoannonse
Annonse

Ohyea... Morgenstund osv.

 

Kan jo beskrive filen litt også:

Linje 1: diverse strenger separert med "|"

Linje 2: diverse atributter separert med " "

Linje 3: vekt (streng)

Linje 4: høyde (streng)

Linje 5: antall moves

Fra linje 6 og utover er formatet:

Linje 1: streng

Linje 2: streng

Linje 3: streng

Linje 4: streng

Linje 5: diverse atributter separert med " "

Disse 5 linjene beskriver 1 "move". De gjentas like mange ganger som det er antall moves i fila.

Helt til slutt er det en linje som inneholder diverse strenger separert med "|"

 

Hvordan vil enkleste måte å lese denne fila på være?

 

-C-

cactus_jack.zim.txt

Lenke til kommentar

(with-input-from-string (ss (format nil (mkstr "a|b|c~%"
                                              "1 2 3~%"
                                              "72~%"
                                              "174~%"
                                              "2~%"
                                              "move 1, line 1~%"
                                              "move 1, line 2~%"
                                              "move 1, line 3~%"
                                              "move 1, line 4~%"
                                              "4 5 6~%"
                                              "move 2, line 1~%"
                                              "move 2, line 2~%"
                                              "move 2, line 3~%"
                                              "move 2, line 4~%"
                                              "7 8 9~%"
                                              "d|e|f~%")))
 (format t "diverse strenger: ~A~%" (cl-ppcre:split "\\|" (read-line ss)))
 (format t "diverse attributer: ~A~%" (cl-ppcre:split "\\s" (read-line ss)))
 (format t "vekt: ~A~%" (read-line ss))
 (format t "høyde: ~A~%" (read-line ss))
 (let ((num-moves (read-from-string (read-line ss))))
   (format t "antall moves: ~A~%" num-moves)
   (dotimes (i num-moves)
     (format t "move: ~A~%" (read-line ss))
     (format t "move: ~A~%" (read-line ss))
     (format t "move: ~A~%" (read-line ss))
     (format t "move: ~A~%" (read-line ss))
     (format t "diverse attributter: ~A~%" (cl-ppcre:split "\\s" (read-line ss)))))
 (format t "helt til slutt: ~A~%" (cl-ppcre:split "\\|" (read-line ss))))

..gir..

diverse strenger: (a b c)

diverse attributer: (1 2 3)

vekt: 72

høyde: 174

antall moves: 2

move: move 1, line 1

move: move 1, line 2

move: move 1, line 3

move: move 1, line 4

diverse attributter: (4 5 6)

move: move 2, line 1

move: move 2, line 2

move: move 2, line 3

move: move 2, line 4

diverse attributter: (7 8 9)

helt til slutt: (d e f)

til stdout

 

 

edit:

hm.. koden blir så elendig indentert her .. slik skal den se ut:

http://paste.lisp.org/display/15805

Endret av dayslepr
Lenke til kommentar

Mjo... Nå kan ikke jeg lese lisp så veldig godt. Men det ser ikke ut som om den koden der tar hensyn til at det kan være flere moves?

 

Jeg skulle kanskje vært tydeligere med å nevne at det er ikke den der bestemte filen jeg vil lese inn. Men filer på det formatet der.

 

-C-

Lenke til kommentar

Ja nå tror jeg faktisk jeg ser det også :)

Men Lisp er fortsatt ikke min sterkeste side.

Men konseptet skal vel forsåvidt kunne brukes i Java/C# også..

Kan du ikke kommentere koden litt? Hvordan de underliggende kallene bruker den første setningen iallefall. Det er der jeg stusser litt.

 

-C-

Lenke til kommentar

kan si det slik at den fyller variabelen `ss' med tekst-innholdet som skal parses .. og videre ser du at read-line kalles mot `ss'

 

read-line tar i mot en parameter av typen stream, og `ss' er altså en stream .. på samme vis som en åpen fil også er en stream

 

tenk deg at `ss' i stedet var en peker mot en fil - resten av koden under for parsing ville blitt 100% lik

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...