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
 

buzzom

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

Buzzi
 

buzzom

Mitglied
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
 

Pendergast

Erfahrenes Mitglied
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:

buzzom

Mitglied
Und wie mach ich das? Ich will ja auch jeden Wert dann einzeln ansteuern koennen, ihn also als Variable haben wollen.

Buzzi
 

Pendergast

Erfahrenes Mitglied
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;
}
 

buzzom

Mitglied
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...
 

daddz

Mitglied
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
 

buzzom

Mitglied
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.
 

daddz

Mitglied
Dann versuch das mal:
PHP:
$datei = "file.txt";
$file = file($datei);

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

$key_count = count($desc);
$value_count = count($cont);
$keys    = array_values($desc);
$values  = array_values($cont);

$daten = array();
for ($i = 0; $i < $key_count; $i++) {
	$daten[$keys[$i]] = $values[$i];
}

echo $daten['uptime'];

greetz
daddz
 

Pendergast

Erfahrenes Mitglied
buzzom hat gesagt.:
Kommt nix bei der Ausgabe raus...
Äh, ja klar, mein Code war ja auch nur für eine einzige Zeile, der hätte noch in die Schleife gehört. Ich tu selten für andere vollständige Lösungen programmieren - ohne selbst ein wenig nachzudenken lernt man ja nunmal nichts. ;)
 

Neue Beiträge

Forum-Statistiken

Themen
272.361
Beiträge
1.558.639
Mitglieder
187.834
Neuestes Mitglied
jordanx0206