Maik Görgens: Zeilenumbrüche ersetzen

Hallo!

Zum komprimieren benutze ich Compress::Zlib;

Wenn ich nun einen String mit compress() komprimiere bekomme ich einen schönen kurzen String, aber mit Zeilenumbrüchen. Diese möchte ich nun ersetzen.
Ich habe es versucht mit:

$dest =~ s/\n/\n/g;

aber dies funktioniert nicht. Weiß jemand, wie ich hier die Zeilenumbrüche ansprechen muß. Muß ich da auf "Binärität" achten?
Oder gibt es eine andere Möglichkeit, diesen Mehrzeiligen string auf eine Zeile zu bekommen, aber so, das es auch wieder rückgängig geht.

Vielen Dank im Vorraus
Maik

  1. Hallo Maik,

    Wenn ich nun einen String mit compress() komprimiere bekomme ich einen schönen kurzen String, aber mit Zeilenumbrüchen. Diese möchte ich nun ersetzen.
    Ich habe es versucht mit:

    $dest =~ s/\n/\n/g;

    $dest =~ s/\n/\n/mg;
                      ^
    Der Flag "m" steht für multiline und gibt an, daß der Ausdruck auch aus mehreren Zeilen bestehen kann (was für das Ersetzen von Newlines natürlich recht praktisch ist).

    Muß ich da auf "Binärität" achten?

    Was ist "Binärität"?

    Grüße,

    Peter

    1. Hallo Peter,

      $dest =~ s/\n/\n/mg;
                        ^
      Der Flag "m" steht für multiline und gibt an, daß der Ausdruck auch aus mehreren Zeilen bestehen kann (was für das Ersetzen von Newlines natürlich recht praktisch ist).

      das m bedeutet, dass ^ und $ mehrmals im String vorkommen können. Wenn aber nicht nach diesen gesucht wird, ist die Angabe vom m sinnlos.
      (Schaden tuts aber nicht)

      Gruss,
      Kube

      1. Hallo Kube,

        $dest =~ s/\n/\n/mg;

        das m bedeutet, dass ^ und $ mehrmals im String vorkommen können. Wenn aber nicht nach diesen gesucht wird, ist die Angabe vom m sinnlos.
        (Schaden tuts aber nicht)

        OK. Du hast natürlich recht.
        Zu meiner Verteidigung: Ich habe gestern die Funktion des Ausdruckes mit m vor meinem Posting ausprobiert und er funktionierte so wie geplant. Heute habe ich dann (nach deinem Posting) noch den Ausdruck ohne m getestet und der funktionierte natürlich auch. In meinem jugendlichen Leichtsinn hatte ich das aber gestern vergessen und eine falsche Schlussfolgerung getroffen.
        Falsche Fehler häufen sich eben zu vortgeschrittener Stunde ;-).

        Grüße,

        Peter

  2. Hallo!

    Zum komprimieren benutze ich Compress::Zlib;

    Wenn ich nun einen String mit compress() komprimiere bekomme ich einen schönen kurzen String, aber mit Zeilenumbrüchen. Diese möchte ich nun ersetzen.
    Ich habe es versucht mit:

    $dest =~ s/\n/\n/g;

    aber dies funktioniert nicht. Weiß jemand, wie ich hier die Zeilenumbrüche ansprechen muß. Muß ich da auf "Binärität" achten?

    "Funktioniert nicht" ist eine der klarsten und deutlichsten Fehlermeldung in der Welt der Programmierer. Damit kann man den Sachverhalt das etwas nicht funktioniert genaustens beschreiben und alle die bei einer Fehlersuche helfen sollen erkennen sofort: "da funktioniert doch etwas nicht".

    Ich weiss nicht wie du normalerweise Fehler suchst, aber bei CGI Programmen ist das oftmals nicht einfach und läßt sich nur mit Hilfe von Kontrollausgaben lösen. Also solltest du evtl. ein Beispiel haben, von dem was passiert und was nicht passiert. Bei obigen Beispiel solltest du dann nämlich gemerkt haben, dass es einwandfrei (auch ohne 'm') funktioniert.

    #!/usr/bin/perl
    use strict;
    my $test = "aaaaaa\nbbbbbb\ncccccccc";
    print "*****\n$test\n********";
    $test =~ s/\n/\n/g;
    print "*****\n$test\n********";

    führt bei mir zu (den vermutlich) gewünschten Ergebnis.

    struppi.

    1. Hallo!

      "Funktioniert nicht" ist eine der klarsten und deutlichsten Fehlermeldung in der Welt der Programmierer.

      Die Zeilenumbrüche sind auch nach dem ersetzen noch vorhanden

      #!/usr/bin/perl
      use strict;
      my $test = "aaaaaa\nbbbbbb\ncccccccc";
      print "*****\n$test\n********";
      $test =~ s/\n/\n/g;
      print "*****\n$test\n********";

      führt bei mir zu (den vermutlich) gewünschten Ergebnis.

      Tuts auch im allgemeinen, aber nicht bei dem Code, den mir Compress::Zlib ausgibt.

      Gruß Maik

      1. Hallo!

        "Funktioniert nicht" ist eine der klarsten und deutlichsten Fehlermeldung in der Welt der Programmierer.
        Die Zeilenumbrüche sind auch nach dem ersetzen noch vorhanden

        #!/usr/bin/perl
        use strict;
        my $test = "aaaaaa\nbbbbbb\ncccccccc";
        print "*****\n$test\n********";
        $test =~ s/\n/\n/g;
        print "*****\n$test\n********";

        führt bei mir zu (den vermutlich) gewünschten Ergebnis.
        Tuts auch im allgemeinen, aber nicht bei dem Code, den mir Compress::Zlib ausgibt.

        Gut, da du aber nicht sagst was das für ein geheimnissvoller Code ist, kann dir jetzt keiner mehr weiter helfen. Denn das obige ersetzt Zeilenumbrüche, wie du ja selber feststellst. Dann war deine Fragestellung falsch.

        Struppi.

  3. Hallo!

    Zum komprimieren benutze ich Compress::Zlib;

    Wenn ich nun einen String mit compress() komprimiere bekomme ich einen schönen kurzen String, aber mit Zeilenumbrüchen. Diese möchte ich nun ersetzen.

    Warum, wenn ich es richtig verstanden habe, gibt Compress::Zlib binärcode aus, da kann es doch sein, dass irgendwo ein Teil Code aussieht wie \n. Ausserdem, bei was stören dich die \n's?

    Oder gibt es eine andere Möglichkeit, diesen Mehrzeiligen string auf eine Zeile zu bekommen, aber so, das es auch wieder rückgängig geht.

    Unter welchem Betriebsystem arbeitest du?

    mfg *sich fragend, ob er nicht etwas falsch verstanden hat* Andres Freund

    1. Hallo!

      Warum, wenn ich es richtig verstanden habe, gibt Compress::Zlib binärcode aus, da kann es doch sein, dass irgendwo ein Teil Code aussieht wie \n. Ausserdem, bei was stören dich die \n's?

      Ich weiß nicht sicher, ob Compress::Zlib Binärcode ausgibt, aber ich habs vermutet.

      Unter welchem Betriebsystem arbeitest du?

      Win 95

      Gruß Maik