Warum hasst PHP mich eigentlich?
Glumpf
- php
echo "Hallo!";
Ich habe eine Textdatei, deren Zeilen ich per file() in das Array $com schreiben lasse. Dabei kommt es vor, das manche Zeilen leer sind, also eigentlich nur "\n" beinhalten. Wenn ich sie nämlich ausgeben lasse und mir dann den Quelltext ansehe, enthält dieser an jener Stelle nämlich einen Zeilenumbruch.
Ich möchte jetzt mit einer Schleife folgendes erreichen:
Jedes Array-Element von $com soll ausgegeben werden, ES SEI DENN es enthält nur "\n". Übersetzt in Code:
for($i = 0; $i < sizeof($com); $i++) {
if(isset($com[$i]) && $com[$i] != "\n") {
print "<div class=\"com\">".trim($com[$i])."</div>\n";
}
}
Aber aus irgendeinem Grund funktioniert das nicht. Irgendwas stimmt mit der if-Bedingung nicht, denn es wird für jedes Element der print-Befehl ausgeführt! Daraus lässt sich folgern, dass wohl keines der Array-Elemente nur aus "\n" besteht ... Aber wie erklären sich dann die Zeilenumbrüche im Quelltext? Und mit strlen bekomme ich auch 2 als Ergebnis, was auch dafür spricht, dass nur "\n" drinsteht.
Ich kapiers einfach nicht :/
Hab ich irgendwas vergessen oder so? Bitte helft mir :(
Hallo,
Und mit strlen bekomme ich auch 2 als Ergebnis, was auch dafür spricht, dass nur "\n" drinsteht.
Das ist der springende Punkt, "\n" muesste als Länge 1 liefern - denn es handelt sich um genau ein Zeichen (eben den Zeilenumbruch).
Möglicherweise ist es eine Windows-Textdatei, und der zeilenumbruch ist in Wirklichkeit ein "\r\n"?
Wie wärs mit einer Prüfung, ob ein Zeichen vorkommt, was keinerlei Leerzeichen ist, z.b.:
if (preg_match("/\S/", $com[$i])) {
// Es kommt mindestens ein Nicht-Leerzeichen vor
}
else {
//Der String besteht offenbar nur aus Leerzeichen, Zeilenumbrüchen u,ä,
}
Super, danke!!
Dass "\n" als ein Zeichen interpretiert wird wusste ich gar nicht und auch dass Windows "\r\n" als Umbruch darstellt, war mir neu ^^
Danke für eure Hilfe, jetzt klappt es einwandfrei :)
und wann wird geheiratet? ;)
und wann wird geheiratet? ;)
Hab ich jemals gesagt, dass diese Liebe auf Gegenseitigkeit basiert ;)
'Nabend.
Hab ich jemals gesagt, dass diese Liebe auf Gegenseitigkeit basiert ;)
Hat jemand gesagt, daß das zum Heiraten nötig wäre? ;)
hi,
Aber aus irgendeinem Grund funktioniert das nicht. Irgendwas stimmt mit der if-Bedingung nicht, denn es wird für jedes Element der print-Befehl ausgeführt! Daraus lässt sich folgern, dass wohl keines der Array-Elemente nur aus "\n" besteht ... Aber wie erklären sich dann die Zeilenumbrüche im Quelltext? Und mit strlen bekomme ich auch 2 als Ergebnis, was auch dafür spricht, dass nur "\n" drinsteht.
handelt es sich um eine Windows-Datei? hier besteht nämlich der Zeilenumbruch aus 2 Zeichen, was auch die strlen von 2 erkären würde. ansonsten müsste es ja 1 sein.
Am besten du lässt dir mal den ASCII-Code der Datei anzeigen...
mfG,
steckl
Liebe(r) Glumpf,
> for($i = 0; $i < sizeof($com); $i++) {
> if(isset($com[$i]) && $com[$i] != "\n") { // kein trim()...???
> print "<div class=\"com\">".trim($com[$i])."</div>\n"; // trim()... ok.
> }
> }
warum prüfst Du auf $com[$i] != "\n"? Es könnte ja (vor allem bei Windoof-Systemen) auch "\r\n" sein...
Besser so:
foreach ($com as $nummer => $zeile) {
if (trim($zeile) != '') {
print "<div class=\"com\">".trim($zeile)."</div>\n";
}
}
Liebe Grüße aus Ellwangen,
Felix Riesterer.