On Don, 14 Aug 2003 at 13:30 (+0200), Joachim Reiter, EMV-ELV wrote:
Adalbert Michelic schrieb:
Nuja, mit einem kleinem Perl-Skript sollte das eigentlich zu lösen sein. Meine Grundidee basiert darauf, daß ja bekannt ist, wieviele Felder es in einer Zeile gibt. Wenn nun in einer Zeile mehr Felder sind, dann sind soviele Kommatas zuviel, wie Felder zuviel sind. Wenn nun bekannt ist, in welchen Feldern die Kommatas sein können, dann sollten sich die Felder leicht isolieren lassen können und richtig quoten.
Ansatz:
[...] oder so: while (<>) { # Daten aufdröseln @daten=split(/,/); # Wenns 29 Felder sind, also Preis mit Cent if ($#daten == 29) { # Dann Preis neu zusammenbauen $daten[27].=".$daten[28]"; # Und das Centfeld löschen splice (@daten,28,1); } } evtl. wieder zusammenbauen
Das klappt so nicht. Beispiel: 12,34,56 Ist das nun 12,34 und 56 oder 12 und 34,56? Der Datenexport ist so nicht eindeutig - allein mit Programmlogik kann man dem Problem nicht beikommen. Nur wenn man weiss, wie die Felder aufgebaut sind, in welchen Feldern Nachkommastellen auftreten können und wo nicht, kann man über eine Analyse der Zeile _mit einer gewissen Wahrscheinlichkeit_ ein korrektes Splitting erreichen. Aber das wird sehr aufwändig, weil ja nicht alle Felder gefüllt sein müssen und man dann nicht mal mehr weiss, wo die Textfelder sind. Um es mal vorsichtig auszudrücken: der Export ist Murks. Wer einen Trenner benutzt, der auch in Feldern auftauchen kann, gehört zur manuellen Nachbearbeitung verurteilt ;-) Jeder andere Trenner als Komma und Punkt wäre sinnvoll gewesen (ein ; oder | kann höchstens in Textfeldern auftauchen und da sind sie durch die "" identifizierbar) - und das kann man sogar Excel & Co. beibringen. Jan