Der folgende Beitrag wurde am 01. 05. 2007, 15:42 Uhr von Joachim veröffentlicht.
Hi,
vorneweg: meine Perlkenntnisse existieren nicht. Aber ich sitze am Mac und möchte mich bessern ;-)
Aus einem Vokabelprogramm meiner Tochter exportiere ich csv files. Diese möchte ich in Tabellen verwandeln (damit es die Lehrerin besser lesen kann). Leider gibts dann im csv sowas:
text;text;"mehrere; textschnippel";usw;
Ich suche nach einer Möglichkeit, dies zu ersetzen, bevor ich dann bei ";" splitte. Sowas geht natürlich nicht:
s/"(.+?)"/replace(';','',$1)/gs
Aber kann ich irgendwie innerhalb von $1 die ";" rausschmeissen?
Gruesse, Joachim
--
Am Ende wird alles gut.
Der folgende Beitrag wurde am 01. 05. 2007, 16:52 Uhr von steckl veröffentlicht.
Hi,
> text;text;"mehrere; textschnippel";usw;
>
> Ich suche nach einer Möglichkeit, dies zu ersetzen, bevor ich dann bei ";" splitte. Sowas geht natürlich nicht:
> s/"(.+?)"/replace(';','',$1)/gs
>
> Aber kann ich irgendwie innerhalb von $1 die ";" rausschmeissen?
Du könntest den String erst mit " splitten und dann in jedem 2. Listenelement die Semikolons ersetzen.
mfG,
steckl
Der folgende Beitrag wurde am 01. 05. 2007, 17:54 Uhr von seth_not@home veröffentlicht.
gudn tach!
alternativ zu steckls vorschlag:#!/usr/bin/perl -w
use strict;
$_ = 'text;text;"mehrere; textschnippel";usw;';
my @splitted = split /(".+?"|.+?);/; # splitte zeile in bestandteile
@splitted = grep {/./} @splitted; # loesche leere zeilen
map {s/[;"]//g} @splitted; # loesche alle verbleibenden ; und "
map {print $_,"\n"} @splitted; # probe-ausgabe
prost
seth
Der folgende Beitrag wurde am 01. 05. 2007, 17:57 Uhr von batooh veröffentlicht.
Hallo.
> Sowas geht natürlich nicht:
> s/"(.+?)"/replace(';','',$1)/gs
Na ja, eigentlich geht das schon, es fehlt nur eine Kleinigkeit.
Gehen wir mal davon aus, du hättest eine Subroutine namens "replace", die in etwa so aussieht:sub replace {
my ($this, $that, $str) = @_;
$str =~ s/\Q$this\E/\Q$that\E/g;
return $str;
}
Dann musst du lediglich noch das "e"-Flag bei deiner obenstehenden Ersetzung hinzufügen (d. h. /egs), damit der Ersetzungsteil als Perl-Code ausgeführt wird, und dann sollte das funktionieren.
Informationen zu den Flags findest du hier: http://de.selfhtml.org/perl/sprache/regexpr.htm#flags
Schöne Grüße.
Der folgende Beitrag wurde am 01. 05. 2007, 21:16 Uhr von Joachim veröffentlicht.
Hi,
> Dann musst du lediglich noch das "e"-Flag bei deiner obenstehenden Ersetzung hinzufügen
_sehr_ cool, das wars :-)
Auch den anderen Danke, aber obige Lösung kommt mir am meisten entgegen.
Gruesse, Joachim
--
Am Ende wird alles gut.
© 1998-2013 SELFHTMLImpressumSoftware: Classic Forum 3.4