Letztes Zeichen jeder Zeile aus Textdatei überprüfen

Popcorn

Grünschnabel
Nabend,
ich schäme mich beinahe diesen Thread zu erstellen, aber ich stehe seit einigen Tagen vor einem kleinen Problemchen:

PHP:
$row = "test;";

//Ist letztes Zeichen des Strings ein Semikolon?
 if($row[strlen($row) - 1] == ";")
 {
	 echo $row;
 }
 else
 {
	 echo "Letztes Zeichen ist kein Semikolon";
 }

Das funktioniert soweit. Gehe ich aber jetzt nach meinem bewährten Schema vor, klappt das ganze merkwürdigerweise nicht.
Ich lasse also eine Datei öffnen, überprüfe diese zeilenweise und spiele das obige Szenario durch.

PHP:
 $datei = fopen("daten.txt", "r");
 while (!feof($datei))
 {
	 $row = fgets($datei);
	 if ($row[strlen($row) - 1] == ";")
	 {
		 echo $row . '<br />';
	 }
	 else
	 {
		 echo "Letztes Zeichen ist kein Semikolon <br />";
	 }
 }
 fclose($datei);

oder mit der Funktion file:
PHP:
 $datei = file('daten.txt');
 foreach ($datei as $row)
 {
	 if ($row[strlen($row) - 1] == ";")
	 {
		 echo $row . '<br />';
	 }
	 else
	 {
		 echo "Letztes Zeichen ist kein Semikolon <br />";
	 }
 }

mit folgenden Zeilen in der daten.txt:

Hallo
Dies ist eine Zeile ohne Semikolon am Ende
Dies ist eine Zeile mit Semikolon am Ende;
Dies ist wieder eine Zeile mit Semikolon am Ende;
Diese hat wieder kein Semikolon

Ausgegeben wird mir 5x "Letztes Zeichen ist kein Semikolon", egal ob ich die Datei mit fgets oder file öffne - aber warum?
 
Weil das letzt Zeichen ein \n oder \r ist.

Funktioniert es, wenn die letzte Zeile ein Semikolon enthält?

paD
 
Weil das letzt Zeichen ein \n oder \r ist.

Funktioniert es, wenn die letzte Zeile ein Semikolon enthält?

paD

Ja, so funktioniert es. Aber halt nur für die letzte Zeile.
Ausgabe, wenn ich zur letzten Zeile ein Semikolon hinzufüge:

Letztes Zeichen ist kein Semikolon
Letztes Zeichen ist kein Semikolon
Letztes Zeichen ist kein Semikolon
Letztes Zeichen ist kein Semikolon
Diese hat wieder kein Semikolon;

(Nicht vom Text irritieren lassen)
 
Wie String schon sagte, liegt es daran dass die Zeile ein verstecktes Zeichen (z.b. \n für Zeilenumbruch) enthält. Diese musst du erst rausfiltern, bspw. so:
PHP:
$datei = file('daten.txt'); 
 foreach ($datei as $row) 
 { 
    $row = str_replace(array("\n", "\r"), '', $row);     
    if ($row[strlen($row) - 1] == ";") 
     { 
         echo $row . '<br />'; 
     } 
     else 
     { 
         echo "Letztes Zeichen ist kein Semikolon <br />"; 
     } 
 }
 
Zurück