textdatei zeilenweise auslesen

buzzom

Mitglied
Ich bin noch recht neu mit PHP, wie man gleich sehen wird :) Habe schon ein wenig probiert komme aber nicht zu nem richtigen Ergebnis. Vielleicht wäre ja hier jemand so freundlich. Also: Ich möchte folgenden Inhalte einer txt Datei auslesen:
Code:
lastreboot|Mit, 10. Aug 2005, 11:36:48
lastreboottime|1123666608
uptime|14 Tage, 1 Stunde, 29 Minuten und 53 Sekunden
uptimetime|1214993
users|9
visibleusers|9
guests|0
players|4
seers|2
wizards|3
visiblewizards|3
maxusers|37
maxuserstoday|10
maxuptime|156 Tage, 11 Stunden, 58 Minuten und 41 Sekunden
maxuptimetime|13521521
und zwar benötige ich immer die Werte bzw. Rest der Zeile hinter |

Habe das ganze schon fseek ausprobiert, aber sobald sich ein Wert ändert schwankt der Wert für fseek, was die Ausgabe da unbrauchbar macht. Wie kann ich das allso mit file() irgendwie auslesen?

Danke
Buzzi
 
Hätt ich was passendes gefunden, hätte ich nicht geschrieben ;) Oder es war für einen Anfänger zu kompliziert.

Buzzi
 
Hab jetzt also folgendes geschafft:
Code:
<?
$datei = "onlinestats";
 $array = file($datei);

  for($x=0;$x<count($array);$x++)
  {  
  	echo $array[$x];  
  	echo "<br>";
  }
?>
Damit bekomme ich jetzt aber nur obige Liste ausgespuckt. Aber ich will ja nur die Werte hinter dem |. Ich versteh das noch nicht richtig mit explode in diesem Zusammenhang.

Danke
Buzzi
 
Na wie du schon richtig rausgefunden hast, kannst du mit file() die Datei zeilenweise in ein Array schreiben. Das brauchst du nur in einer Schleife durchwandern und jede Zeile nach deinen Wünschen verarbeiten, zum Beispiel mit explode().

Aha.. ich war zu langsam. ;)

Code:
$zeile = "key|value";
$spalten = explode("|", $zeile);

echo $spalten[0]; // gibt "key" aus
echo $spalten[1]; // gibt "value" aus (das ist das, was du willst)
 
Zuletzt bearbeitet:
Und wie mach ich das? Ich will ja auch jeden Wert dann einzeln ansteuern koennen, ihn also als Variable haben wollen.

Buzzi
 
Der "schnelle" Weg wäre, variable Variablen zu nutzen. Das würde so funktionieren:

Code:
$zeile = "uptime|14 Tage, 1 Stunde, 29 Minuten und 53 Sekunden";
$spalten = explode("|", $zeile);

$$spalten[0] = $spalten[1];

echo $uptime; // gibt "14 Tage, 1 Stunde, 29 Minuten und 53 Sekunden"

Das setzt aber voraus, dass du dir ganz sicher bist, was da genau für Daten über die Datei herein kommen (und wie sollst du dir sicher sein können, Stichwort Lesefehler etc.). Die Übersichtlichkeit deines Codes leidet auch ziemlich drunter (wo kommen auf einmal die ganzen Variablen her, die dann weiter im Code verwendet werden?).

Ich würde das ganze dann über eine switch-case-Struktur lösen:

Code:
$spalten = explode("|", $zeile);

switch ($spalten[0]) {
case "uptime":
    $uptime = $spalten[1];
    break;
case "users":
    $users = $spalten[1];
    break;
}
 
Code:
<?
$datei = "/mud/mudlib/etc/onlinestats";
 $array = file($datei);

  $spalten = explode("|", $array);

switch ($spalten[0]) {
case "uptime":
    $uptime = $spalten[1];
    break;
case "users":
    $users = $spalten[1];
    break;
}
  echo $uptime;
?>
Kommt nix bei der Ausgabe raus...
 
Hab da mal schnell was zamgebastelt (geht sicher noch besser glaub ich):
PHP:
$datei = "deineDatei";
$file = file($datei);

foreach($file as $element) {
	foreach(explode("|", $element) as $key => $element2) {
		if($key == 0) {
			$desc[] = $element2;
		}
		else {
			$cont[] = $element2;
		}
	}
}

$daten = array_combine($desc, $cont);
Dann kannst du auf die einzelnen Zeilen so zugreifen:
PHP:
echo $daten['uptime'];
echo $daten['users'];
usw...

greetz
daddz
 
array_combine() gibts leider erst ab PHP 5, wie ich mit Bedauern feststellen musste.

Habe aber nur PHP Version 4.3.1 zur Verfügung auf meinem Server.
 
Zurück