»» vor jeder zeile
Michael W.
- programmiertechnik
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.
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;
}
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.
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
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
Halihallo Michael
ich habe eine textfile und möchte sie einlesen.
nun steht der text in einer variable $textwie 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
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);
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
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);
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
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
?
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
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.
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);
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
Danke
MfG
Michael W.
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.