Forum Doku Wiki Blog

Forumsarchiv 2007, Mai
suchen/ersetzen in csv-dateien/regulaere Ausdruecke

archivierte Beiträge lesen

  1. (PERL) suchen/ersetzen in csv-dateien/regulaere Ausdruecke von Joachim, 01. 05. 2007, 15:42

suchen/ersetzen in csv-dateien/regulaere Ausdruecke

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.

suchen/ersetzen in csv-dateien/regulaere Ausdruecke

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

suchen/ersetzen in csv-dateien/regulaere Ausdruecke

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

suchen/ersetzen in csv-dateien/regulaere Ausdruecke

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.

suchen/ersetzen in csv-dateien/regulaere Ausdruecke

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