PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [Perl] CSV-Dateien parsen...


noid
2006-07-02, 15:42:04
Mit was macht man das?

vorallem brauch ich ne Idee, wie das bei
Test,"blabla, bsfsf",232
noch Einwandfrei _3_ Spalten erkennt...

(Meine Regex kann das noch nicht ganz)

Coda
2006-07-02, 15:48:08
Sind es denn immer 3 Spalten?

noid
2006-07-02, 15:55:17
nein, eben nicht... und auch nicht immer in Quotes.

CSV.pm funktioniert bei mir leider nicht (oder die Synopsis ist mal wieder total Banane), aber die Anzahl der Spalten hab ich ja in der ersten Zeile...
Ich dachte mit einer schönen Regex würde das leicht gehen. (immer Komma trennen, außer wenn <insert funktionierende Bedingung hier>)

Xmas
2006-07-02, 16:45:09
Sollte nicht
(((\".*?\")|([^\"].*?))($|\,))*
funktionieren?
Allerdings kenne ich mich mit Perl nicht aus und weiß nicht wie du die Inhalte von Klammer-Gruppen bekommst wenn es eine variable Anzahl derer gibt.

Ansonsten dürfte es doch auch kein Problem sein die Zeilen Stück für Stück "von Hand" zu parsen, es gibt schließlich nur 3 Sonderzeichen (Quote, Komma und EOL).

noid
2006-07-02, 18:06:40
hm, meine Regex sieht bis auf das ^\" ziemlich gleich aus... X-(
Ich werd's heute abend noch testen - wenn nicht schreib ich noch nen eigenen split...

thnx.

noid
2006-07-02, 21:14:12
Nachtrag:
damit geht es nun:
,(?=(?:[^"]*"[^"]*")*(?![^"]*"))

@Xmas, deiner war etwas seltsam O_o Er hat zwar sehr gut gemachted - aber zum Split war er leider nicht praktisch, da man hierfür die , braucht...

PS: andere Perl-Module sind unpraktisch, unhandlich, oder gar fehlerhaft, wenn der delimiter , ist und texte in quotes mit , vorkommen. (Welcher Schlumpf hat sich eigentlich die Dateien erdacht, welche ich bearbeiten will?)

Coda
2006-07-02, 21:31:25
Tja da sieht mans mal wieder. XML mag zwar unglaublich viel Overhead produzieren aber es lässt sich wenigstens vernünftig parsen ;)

HellHorse
2006-07-02, 22:03:31
Coda[/POST]']XML ... es lässt sich wenigstens vernünftig parsen ;)
Das trifft bloss zu, falls drei Sachen gegeben sind:

Der XML Parser wurde von jemandem mit Ahnung vom XML geschreiben. Das ist selten genug der Fall. Deshalb gibt's für viele Sprachen, nebst dem eingebauten XML Parser noch Bindings für libxml mit der Begründung, dass man denen wenigstens trauen kann ;). Wie lange ging es doch noch gleich mal, bis der im JDK mitgelieferte XML Parser mit BOM zurecht kam? Bei Ruby kompiliert im Moment zum Beispiel nicht einmal der DTD Parser (ja, DTD ist nicht XML)!
Das XML wurde von jemandem mit Ahnung von XML generiert. Das ist noch seltener der Fall. Unglaublich viele Leute denken sie könnten XML "von Hand" generieren. All die nicht wohlgeformten (!!!) RSS Feeds beweisen das Gegenteil.
Das Character Set wird unterstützt. Da will ich gar nicht erst anfangen.

Xmas
2006-07-03, 01:01:16
noid[/POST]']@Xmas, deiner war etwas seltsam O_o Er hat zwar sehr gut gemachted - aber zum Split war er leider nicht praktisch, da man hierfür die , braucht...
Nun, dafür ist doch das ($|\,) da (also End of Line oder Komma). Deine RegEx ist ja scheinbar für jede Spalte separat, meine war hingegen für die gesamte Zeile auf einmal gedacht.

noid
2006-07-03, 10:08:13
Xmas[/POST]']Nun, dafür ist doch das ($|\,) da (also End of Line oder Komma). Deine RegEx ist ja scheinbar für jede Spalte separat, meine war hingegen für die gesamte Zeile auf einmal gedacht.

Zum Split war die Regex anscheinend nicht geeigent, wobei sie sehr wohl zum matchen der einzelnen Elemente genügt hätte ;)
Der Split will ja _nur_ den Delimiter. Sonst sieht das ganze total Übel aus X-D