[PHP] Daten aus einer Textdatei auslesen und includen

madbros

Lt. Junior Grade
Registriert
Juni 2004
Beiträge
328
Mahlzeit Kameraden,

folgende Problemstellung:

ich habe eine Datei.txt, gefüllt mit allerlei lustigem Text. Ich möchte nun erreichen, dass meine Website per PHP den Inhalt der Datei ab einer bestimmten Zeile (oder einem Steuerzeichen) bis zu einem bestimmten anderen (oder demselben, nur halt 10 oder 12 oder wieviel Zeilen auch immer tiefer) Steuerzeichen ausliest, in eine (bereits vorhandene ) HTML-Seite verpackt und dann ausgibt. Wie mache ich das? Sicher wurde das schon mal behandelt, aber ich habe bis jetzt keine befriedigende Antwort gefunden.

THX schon mal
 
ok, vielleicht hätte ich dazu sagen sollen, dass ich leider noch ein blutiger php-anfänger bin.

kann mir jemand was daraus basteln?
 
koennen ja, aber mal ehrlich - schlau wirst du daraus nicht und dein anfaenger-dasein wird sich auch in zukunft nicht aendern, wenn du nicht lernst, deine probleme selbst zu loesen. hilf dir selbst, dann ist allen geholfen, die dokumentation und damit eine menge zum rumspielen hast du ja jetzt, zumal das auch eine gute einsteigsaufgabe darstellt, schoen leicht.
 
So, habe da mal jetzt folgendes gebastelt:

PHP:
<?php

	$datei = "textausgabe.txt";
	$text = file($datei);
	$bedingung = "ueberuns";										// wird später ersetzt durch übergebenen Parameter $_GET['inhalt']
	
	
	for ($x = 0; $x < count($text); $x++)							// von x = 0 bis Zeilenanzahl, nach jedem Durchlauf x = x+1
	{	
		if (strpos($text[$x], $bedingung) === true)					// wenn Bedingungsstring gefunden
		{
			for ($y = $x+1; $y < count($text); $y++)				// von aktueller Zeile bis Zeilenanzahl, nach jedem Durchlauf y = y+1
			{
				if (strpos($text[$y], $bedingung) === false)		// wenn Bedingungsstring nicht gefunden
				{													//
	  				echo $text[$y];									// Ausgabe des Textes der Datei
  					echo "<br>";									
  		        }
  				else												//wenn Bedingungsstring gefunden
	  			{
		  			$y = count($text);								// y = Zeilenanzahl der Datei, um innere for abzubrechen	
		  			$x = count($text);								// x = Zeilenanzahl der Datei, um äußere for abzubrechen
  				}
			}
		}
	}

?>

Zuerst soll er also den Bedingungsstring suchen, um danach mit der Textausgabe zu beginnen, bis er den String ein zweites Mal findet.

Dann wird die Zeilenanzahl auf Dateiende gesetzt, damit er die Suche abbricht und nicht die ganze Datei, die ja möglicherweise etwas umfangreicher sein könnte, bis zum Ende durchsucht.

Die Textdatei sieht so aus
erstertext

text1
text1
text1
text1

erstertext

ueberuns

text2
text2
text2
text2

ueberuns

drittertext

text3
text3
text3
text3

drittertext

Das Problem:

Es geht nicht. Ich bekomme keinen Fehler, er gibt einfach nichts aus. Vermutlich habe ich irgendwo einen Logik-Fehler, aber ich finde ihn nicht. Kann mir da wer helfen?

PHP:
<?php

	$datei = "textausgabe.txt";
	$text = file($datei);
	$bedingung = "ueberuns";										// wird später ersetzt durch übergebenen Parameter $_GET['inhalt']
	
	
	for ($x = 0; $x < count($text); $x++)							// von x = 0 bis Zeilenanzahl, nach jedem Durchlauf x = x+1
	{	
		if ( $text[$x] == $bedingung )								// wenn Bedingungsstring gefunden
		{
			for ($y = $x+1; $y < count($text); $y++)				// von aktueller Zeile bis Zeilenanzahl, nach jedem Durchlauf y = y+1
			{
				if ( $text[$y] != $bedingung )						// wenn Bedingungsstring nicht gefunden
				{													//
	  				echo $text[$y];									// Ausgabe des Textes der Datei
  					echo "<br>";									
  				}
  				else												//wenn Bedingungsstring gefunden
	  			{
		  			$y = count($text);								// y = Zeilenanzahl der Datei, um innere for abzubrechen	
		  			$x = count($text);								// x = Zeilenanzahl der Datei, um äußere for abzubrechen
  				}
			}
		}
	}

?>

Ich hab's auch nochmal so versucht, aber ohne Erfolg (leider kann ich die Änderungen nicht fett machen, aber ich habe die if's geändert). Wieder keine Fehlermeldung, einfach nur keine Ausgabe. Es ist übrigens auch keine Endloschleife, auch wenn's auf den ersten Blick so aussieht.
 
Zuletzt bearbeitet:
Ein wenig die Holzhacker-Methode, aber geht soweit; Abbruch usw. kannst Du ja selbst einfügen. Das Problem ist eingentlich das $bedingung niemals "ueberuns" war, da durch das Textformat der Zeilenvorschub noch mit am eigentlichen Text hängt. Vielleicht geht Dein Code ja, wenn Du auch .chr(13).chr(10) in der Abfrage benutzt.

PHP:
<?php

 $datei = "textausgabe.txt";
 $text = file($datei);
 $bedingung = "ueberuns".chr(13).chr(10);
    
 $erste = array_search($bedingung, $text);
 $erste++;

 for ($a = $erste; $text[$a] != $bedingung; $a++) {
  echo $text[$a]."<br />";
 }

?>
 
ja, wenn ich den Zeilenvorschub berücksichtige, geht's. danke erstmal. jetzt ist aber ein neues problem aufgetaucht. ich versuch das erstmalzu lösen, aber ihr werdet heute sicher nochmal von mir hören... :freak:



edit: ok, problem gelöst. hatte mich gewundert, warum er, wenn der Suchstring in der letzten Zeile der Quelldatei stand, den Suchstring mit ausgegeben hat. Da ich aber den Zeilenvorschub mit berücksichtigt habe, muss ich natürlich noch mindestens eine weitere Zeile in der Quelldatei haben, und wenns nur ne leere Zeile ist. Ansonsten sieht der Code jetzt so aus:
PHP:
<?php

	$datei = "textausgabe.txt";
	$text = file($datei);
	$bedingung = $_GET['inhalt'].chr(13).chr(10);					// übernimmt Parameter aus index.php je nach angeklickten Menupunkt
	
	
	for ($x = 0; $x < count($text); $x++)							// von x = 0 bis Zeilenanzahl, nach jedem Durchlauf x = x+1
	{	
		if ( $text[$x] == $bedingung )								// wenn Bedingungsstring gefunden
		{
			for ($y = $x+1; $y < count($text); $y++)				// von aktueller Zeile bis Zeilenanzahl, nach jedem Durchlauf y = y+1
			{
				if ( $text[$y] != $bedingung )						// wenn Bedingungsstring nicht gefunden
				{													//
	  				echo $text[$y];									// Ausgabe des Textes der Datei
  					echo "<br>";									
  				}
  				else												//wenn Bedingungsstring gefunden
	  			{
		  			$y = count($text);								// y = Zeilenanzahl der Datei, um innere for abzubrechen	
		  			$x = count($text);								// x = Zeilenanzahl der Datei, um äußere for abzubrechen
  				}
			}
		}
	}

?>

funktioniert hervorragend.

thx @ euch beide
 
Zuletzt bearbeitet:
Zurück
Oben