Michael W.: »» vor jeder zeile

Hallo,

ich habe eine textfile und möchte sie einlesen.
nun steht der text in einer variable $text

wie kann ich jetzt vor jeder zeile ein '»»' setzten??

so wie es hier in diesem forum üblich ist wenn man eine nachricht beantwortet.

MfG
Michael W.

  1. Hi,

    vielleicht gibt es auch noch eine möglichkeit das in der Variable zu machen z.B. indem man \n sucht und durch \n>> ersetzt, aber das weiß ich gerade nicht. Was aber gehen müsste wäre das zeilenweise auslesen der Datei:
    while (!feof($l_hfile)) {
        $l_filerow = fgets($l_hfile);
        $l_completefile .= ">>".$l_filerow;
    }

    1. OK

      ja also PHP ist die sprache meines vertrauens.
      einigen wir uns mal auf die variable $message - darin steckt ein text.
      zb.:

      hallo
      das ist ein

      text.

      nun soll wenn ich die variable erneut einlese und ausgebe so da stehen:

      » hallo
      » das ist ein

      » text.

      gerade ist mir auch noch aufgefallen das nicht nur ein » davor muss sondern auch ein ' ' also ein leerzeichen. also '» '

      while (!feof($l_hfile)) {
          $l_filerow = fgets($l_hfile);
          $l_completefile .= ">>".$l_filerow;
      }

      das verstehe ich nicht.

      MfG
      Michael W.

      1. Hallo

        while (!feof($l_hfile)) {
            $l_filerow = fgets($l_hfile);
            $l_completefile .= ">>".$l_filerow;
        }
        das verstehe ich nicht.

        also, du hast da ja eine while-schleife, die durchlaufen wird, solange nicht das ende (feof) der datei erreicht ist.
        in $l_filerow wird nun immer eine zeile eingelesen.
        $l_completefile .= ">>".$l_filerow; ist die kurzschreibweise für
        $l_completefile = $l_completefile.">>".$l_filerow;
        es wird also an den bestehenden text erst ein ">>" angehängt und dann die ausgelesene zeile. und das solange bis die datei vollständig ausgelesen ist.
        um es deinen ansprüchen nun gerecht zu machen musst du noch abprüfen, ob die zeile einen inhalt hat. also würde ich die schleife nun so gestalten:

        while (!feof($l_hfile)) {
          $l_filerow = fgets($l_hfile);
          if (empty(trim($l_filerow))) {
            $l_completefile .= "\n";
          } else {
            $l_completefile .= ">> ".$l_filerow;
          }
        }

        falls also die zeile nach beseitigen der leerzeichen usw keinen inhalt hat wird der erste teil der if-anweisung ausgeführt, also nur ein zeilenumbruch angefügt. hat sie aber einen inhalt, so trifft ie else-anweisung zu und das ">> " wird davorgepackt

        Grüße

        David

        --

        "Nobody will ever need more than 640k RAM!"
        1981 Bill Gates
        1. Hallo Michael,

          wenn Du ohnehin php benutzt, dann mach Dir doch das Leben nicht immer so schwer...

          Lies die Datei nicht in einen Skalar ein, sondern in ein Array. Das geht äußerst bequem mit

          $datei=file("dateiname");

          Dann kannst Du die Ausgabe des Arrays über eine Schleife bewerkstelligen:

          define("QUOT","»» ");
          define("BR","<br />");

          foreach($datei => $zeile)
          {
            echo QUOT.$zeile.BR;
          }

          so zum Beispiel. Allerdings hängt nun das Zeilenendezeichen noch zwischen dem Zeilentext und dem Break-Tag. Wenn es dich dort stört, musst Du es vorhher wegnehmen. Du hast ja leider nicht gesagt, WO Du die Datei auzugeben gedenkst. Könnte ja auch auf einem Lochstreifenstanzer sein, da passt das natürlich alles nicht... :-))

          Grüße

          Tom

  2. Halihallo Michael

    ich habe eine textfile und möchte sie einlesen.
    nun steht der text in einer variable $text

    wie kann ich jetzt vor jeder zeile ein '»»' setzten??

    so wie es hier in diesem forum üblich ist wenn man eine nachricht beantwortet.

    Meinst du nicht, dass es unter umständen sinnvoll sein könnte, wenn du die
    Programmiersprache nennst, auf der du dies umsetzen möchtest?

    Nun, "vor jeder zeile", was bedeutet das? - Richtig, ein vorangehendes "\n" kennzeichnet
    diese. Jetzt soll man ein "»»" davorsetzen, also alle "\n" durch "\n»»" (bzw.) ersetzen
    und schon geht's. Wie? - Mit RegularExpressions.
    Ach ja, die erste Zeile ist davon meist nicht betroffen, also ein »» manuell an den Anfang setzen.

    Viele Grüsse

    Philipp

    1. use Mosche;

      Nun, "vor jeder zeile", was bedeutet das? - Richtig, ein vorangehendes "\n" kennzeichnet
      diese. Jetzt soll man ein "»»" davorsetzen, also alle "\n" durch "\n»»" (bzw.) ersetzen
      und schon geht's. Wie? - Mit RegularExpressions.
      Ach ja, die erste Zeile ist davon meist nicht betroffen, also ein »» manuell an den Anfang setzen.

      Wobei es einfacher wäre, /^/ durch /»»/ zuersetzen. Der Zeilenanfang bleibt davon unberührt, und mann muss keine Sonderfälle (Unix, Windows, Mac) betrachten.

      use Tschoe qw(Matti);

      --

        Anyone who quotes me in their sig is an idiot. -- Rusty Russell.
      1. Halihallo Matti

        Nun, "vor jeder zeile", was bedeutet das? - Richtig, ein vorangehendes "\n" kennzeichnet
        diese. Jetzt soll man ein "»»" davorsetzen, also alle "\n" durch "\n»»" (bzw.) ersetzen
        und schon geht's. Wie? - Mit RegularExpressions.
        Ach ja, die erste Zeile ist davon meist nicht betroffen, also ein »» manuell an den Anfang setzen.

        Wobei es einfacher wäre, /^/ durch /»»/ zuersetzen. Der Zeilenanfang bleibt davon unberührt, und mann muss keine Sonderfälle (Unix, Windows, Mac) betrachten.

        Wenn jede Zeile, wovon ich _nicht_ ausgegangen bin (der Autor hat ja geschrieben, dass
        der gesamte Text in einer Variablen vorliegt), separat verarbeitet wird, ja. Wenn nein,
        wird nur der _String_-Anfang gematched.

        Viele Grüsse

        Philipp

        1. use Mosche;

          Wobei es einfacher wäre, /^/ durch /»»/ zuersetzen. Der Zeilenanfang bleibt davon unberührt, und mann muss keine Sonderfälle (Unix, Windows, Mac) betrachten.

          Wenn jede Zeile, wovon ich _nicht_ ausgegangen bin (der Autor hat ja geschrieben, dass
          der gesamte Text in einer Variablen vorliegt), separat verarbeitet wird, ja. Wenn nein,
          wird nur der _String_-Anfang gematched.

          Du hast insoweit recht, dass ich nicht erwähnt habe, dass er den global(g) und den multiple-lines(m) modifier benötigt. Beispiel.

          ############
          my $string = <<ENDE;
          Dies ist ein String
          mit
          Zeilenumbrüchen.

          Blah
          ENDE

          $string =~ s/^/»» /gm;
          print $string;
          ############
          ergibt:

          Dies ist ein String
          mit
          Zeilenumbrüchen.

          Blah

          use Tschoe qw(Matti);

          --

            Anyone who quotes me in their sig is an idiot. -- Rusty Russell.
          1. Halihallo Matti

            [...]

            Du hast insoweit recht, dass ich nicht erwähnt habe, dass er den global(g) und den multiple-lines(m) modifier benötigt. Beispiel.

            oh, ja. Und ich hab an _das_ gar nicht gedacht. Ist IMO sogar die viel schönere Variante, hast recht.

            Viele Grüsse

            Philipp

          2. my $string = <<ENDE;
            Dies ist ein String
            mit
            Zeilenumbrüchen.

            Blah
            ENDE

            $string =~ s/^/»» /gm;
            print $string;
            ############
            ergibt:

            Dies ist ein String
            mit
            Zeilenumbrüchen.

            Blah

            wie jetzt wenn mein text in $message liegt, wie könnte jetzt das script aussehen?

            $message = "Hallo,\nDas ist ein Text";
            $message =~ s/^/» /gm;

            würde ausgeben:

            » Hallo,
            » Das ist ein text

            ?

            1. Hallo Michael,

              wie jetzt wenn mein text in $message liegt, wie könnte jetzt das script aussehen?

              $message = "Hallo,\nDas ist ein Text";
              $message =~ s/^/» /gm;

              würde ausgeben:

              » Hallo,
              » Das ist ein text

              ?

              Mein Gott! Probier es doch aus! Und ja, FYI, das klappt, ich hab's gerade probiert... (hätte mich auch gewundert, wenn das nicht geklappt hätte)

              Grüße,

              Christian

              --
              Ich wünsche allen frohe Weihnachten!
              Ich bitte darum, dass ein Themenbereich (BARRIEREFREIHEIT) eingerichtet wird.
              1. Hallo,»» Hallo Michael,

                wie jetzt wenn mein text in $message liegt, wie könnte jetzt das script aussehen?

                $message = "Hallo,\nDas ist ein Text";
                $message =~ s/^/» /gm;

                würde ausgeben:

                » Hallo,
                » Das ist ein text

                ?

                Mein Gott! Probier es doch aus! Und ja, FYI, das klappt, ich hab's gerade probiert... (hätte mich auch gewundert, wenn das nicht geklappt hätte)

                da fragt man einmal nach und schon werden die leute agressiv...
                bei mir hat es nicht funktioniert.
                ##################################

                <?php
                $message = "Hallo,\nDas ist ein Text";
                echo $message;
                print "<br><br>";
                $message =~ s/^/» /gm;
                echo $message;
                ?>

                ##################################
                (http://www.michaelwoelk.de/test/)
                Fehler in Zeile 5: $message =~ s/^/» /gm; ...

                MfG
                Michael W.

                1. use Mosche;

                  da fragt man einmal nach und schon werden die leute agressiv...

                  Es wäre einfacher gewesen, wenn du es gleich ausprobiert hättest, anstatt nachzufragen. Außerdem haben Philip, Christian und ich von einer perl-Lösung gesprochen.

                  bei mir hat es nicht funktioniert.
                  ##################################

                  <?php
                  $message = "Hallo,\nDas ist ein Text";
                  echo $message;
                  print "<br><br>";
                  $message =~ s/^/» /gm;

                  Ich kann leider kein PHP, sonst könnte ich dir vielleicht weiterhelfen. ABer bist du sicher, dass ein regulärer Ausdruck in PHP so geschrieben wird, war das nicht was mit preg_replace oder so? Und warum benutzt du einmal print und einmal echo?

                  use Tschoe qw(Matti);

                  --
                    Anyone who quotes me in their sig is an idiot. -- Rusty Russell.
                2. Hallo Michael,

                  da fragt man einmal nach und schon werden die leute agressiv...

                  Nein, aber eine Frage "Funktioniert das wirklich?" wirst Du wohl selbst beantworten können.

                  bei mir hat es nicht funktioniert.

                  Wir haben hier von Perl gesprochen und nicht von PHP. In PHP sieht das ganze anders aus:

                  <?php
                  $message = "Hallo,\nDas ist ein Text";
                  echo $message;
                  print "<br><br>";

                  Warum Du hier print und nicht echo verwendest, verstehe ich auch nicht...

                  $message =~ s/^/» /gm;

                  $message = preg_replace ('/^/m', '» ', $message);

                  echo $message;
                  ?>

                  Fehler in Zeile 5: $message =~ s/^/» /gm; ...

                  Klar, das ist auch Perl-Syntax und _nicht_ PHP-Syntax.

                  Grüße,

                  Christian

                  --
                  Ich wünsche allen frohe Weihnachten!
                  Ich bitte darum, dass ein Themenbereich (BARRIEREFREIHEIT) eingerichtet wird.
                  1. Danke

                    MfG
                    Michael W.

  3. Hallo,
    was ich noch zu meinen Vorgängern hinzufügen will. Du könntest auch das Modul Text::Wrap verwenden.

    http://www.perldoc.com/perl5.8.0/lib/Text/Wrap.html

    $xNeTworKx.