Problem: Zeilen werden per fgets nicht korrekt eingelesen

mcta

Grünschnabel
Hallo,

ich bitte um Nachsicht bei diesem Anfängerproblem, aber ist meiner erster Post...

Es geht darum das ich ein kleines Programm schreiben möchte, dass mir Zeile für Zeile
eine Textdatei ausliest, und falls eine bestimmte Bedingung zutrifft (also ein gewisser String
erkannt wird), diese Zeile auf dem Bildschirm ausgegeben wird.
Folgendes habe ich mir nun zusammengeschustert:

---------test.php--------
<?php
$datei = "test.txt";
$fp = fopen($datei, "r") or die("konnte Datei nicht öffnen");

while ( ! feof($fp))
{

fgets($fp, 19);
$zeilevll = fgets($fp, 3);

If ($zeilevll == KO) {
print ($zeilevll);
$zeile = fgets($fp, 800);
print ($zeile . "<br>"); }

Else { echo "nichts gefunden<br>"; }
}

fclose($fp);
?>

---------test.php--------


---------test.txt-------- (Die Textdatei die eingelesen wird)
XXXXXXXXXXXXXXXXXXX KO-Titel 1
XXXXXXXXXXXXXXXXXXX KO-Titel 2
XXXXXXXXXXXXXXXXXXX KO-Titel 3

XXXXXXXXXXXXXXXXXXX KO-Titel 4
---------test.txt-------- (Die Textdatei die eingelesen wird)


Hier nun die leider nicht korrekte Ausgabe im Browser:

----
nichts gefunden
nichts gefunden
KO-Titel 2
nichts gefunden
nichts gefunden
KO-Titel 4
----

Es wird offensichtlich nur jede zweite Zeile die auf die Bedingung zutrifft, gemäss meiner
Vorstellung, im Browser ausgegeben. Weshalb? Ich kann mir das nicht erklären, bin mir aber sicher, dass ihr mir helfen könnt!

Vielen Dank und Gruss
 
Was Sicaine meinte, sind unsere [CODE]dein Code[/CODE]......Tags. Alternativ auch in Farbe erhältlich per [PHP]dein PHP-Code[/PHP]

Verwende diese bitte... oder schreibst du deinen Code daheim auch mit dieser Schriftformatierung? ;)
 
Entschuldigt, hier nachfolgend der Code:

PHP:
<?php
$datei = "test.txt";
$fp = fopen($datei, "r") or die("konnte Datei nicht öffnen");
while ( ! feof($fp))
   {
   fgets($fp, 19);
   $zeilevll = fgets($fp, 3);
 
   If ($zeilevll == KO) {
	  print ($zeilevll);
	  $zeile = fgets($fp, 800);
	  print ($zeile . "<br>"); }
 
	Else { echo "nichts gefunden<br>"; }
	}
 
fclose($fp);
?>


Textdatei test.txt:
XXXXXXXXXXXXXXXXXXX KO-Titel 1
XXXXXXXXXXXXXXXXXXX KO-Titel 2
XXXXXXXXXXXXXXXXXXX KO-Titel 3
XXXXXXXXXXXXXXXXXXX KO-Titel 4
Und die Ausgabe im Browser:
--
nichts gefunden
nichts gefunden
KO-Titel 2
nichts gefunden
nichts gefunden
KO-Titel 4

Erneut vielen Dank.
 
1. else schreibt man klein
2. für sowas is php.net/preg_match besser geeignet
3. wie wärs wenn du $zeilevll einfach mal vor der If testweise ausgibts? <<< das nennt man DEBUGGEN!
4. Ansonsten guck dir mal php.net/file an.
 
Sicaine hat gesagt.:
1. else schreibt man klein
aha.
2. für sowas is php.net/preg_match besser geeignet
danke für den wertvollen Tipp, wollte eben gerne verstehen wieso das Ganze mit
meiner Variante nicht funktioniert - man will ja was lernen.
3. wie wärs wenn du $zeilevll einfach mal vor der If testweise ausgibts? <<< das nennt man DEBUGGEN!
bitte nicht schreien! Im Übrigen ergibt ja die Ausgabe im Browser das $zeilevll nicht immer == KO ist - wenn ich mir nun anschaue welche Werte die Variable annimmt weiss ich leider trotzdem noch nicht wieso das so ist.
4. Ansonsten guck dir mal php.net/file an.
Geht doch, danke auch
 
Hmpf. Das was ich hier gemacht habe, war dir Hinweise, Tipps und Ratschläge zu geben.
das 1te war ein Programmiertechnischer bzw. stylischer Hinweis. btw: if ebenfalls.
das 2te war ein Tipp meinerseits den du nachgehen kannst oder nicht. Hat aber nichts damit zu tun ob ich mir jetzt netterweise die Zeit nehme dein Problem trozdem zulösen.
das 3te Ich wollte hier genau den Wert von $zeilexy wissen und nicht was der Browser ausgibt. Und mein schreien war gerechtfertigt da dus ja auch jetzt noch nicht gemacht hast.
das 4te ein weiterer Tipp meiner Persnöichen Erfahrung den ich dir zukommen lasse.

So und jetzt meine neuen Zahlen :
1. Ich will den INHALT wissen! Nich deine Echoausgabe sondern den genauen Wortlaut des INhaltes der variable $zeilevilll was du eigentlich schon längst gemacht haben solltest, da man vorher richtig Debuggt!.
2. Nur weil dir PHP KO als String anerkennt schreibt man trozdem 'KO'
3. die } kommen immer in eine extra Zeile
 
Versteh' mich nicht falsch, es war nicht meine Absicht rüde auf deine Ratschläge zu reagieren - immerhin haben sie mich ja letztendlich zum Ziel geführt (nicht umsonst finden sich in den wenigen Zeilen zwei Dankesbeteuerungen), jedoch wollte ich damit zum Ausdruck bringen, dass ein Umgangston wie ihn bspw. Sven Mintel handhabt für einen Newbie symphatischer wirkt. Denn - und ich denke das lässt sich nicht abstreiten - man hätte sicherlich mit weniger Zynismus (s. eben Sven) zum Ziel gefunden.
Wie auch immer, ich hoffe das wäre damit aus der Welt geschafft - ich möchte aber den Moment gleich nutzen dich nicht noch mit mehr Fragen zu löchern, sondern "meine" Lösung zu präsentieren.
PHP:
while ( ! feof($fp))
{
fgets($fp, 21);
$zeilevll = fgets($fp, 1024);
if ( strstr( $zeilevll, "KO" ))
{
		print ($zeilevll . "<br>");
 
}
 
}

Möchte mich also erneut herzlich bedanken und vergessen wir das Missverständnis besser, haben wohl etwas aneinander vorbei geredet. In diesem Sinne,

Gruss mcta
 
Jo dann is das geklört dann würd ich dir aber trozdem sagen dass du preg_match ansiehst. Etwas passender dafür gibts nicht.
 
Zurück