Joachim: suchen/ersetzen in csv-dateien/regulaere Ausdruecke

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.
  1. 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

  2. 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

  3. 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.

    1. 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.