auslesen einer txt
azok
- php
hi!
ich habe gestern ein kleines programm für php geschrieben, mit dem ich schnell und einfach news auf meine seite geben kann. das programm ist so aufgebaut:
datenausfeld1~datenausfeld2~datenausfeld3~datenausfeld4
für einen neuen datensatz erstellt mir php dann nach dem jeweils vorigen datensatz eine leerzeile durch \n.
nun ja, jetzt kommt mein problem. ich möchte diese daten auf einer anderen seite auslesen. - das ist noch nicht das problem, aber php liest mir immer nur den ersten (den obersten) datensatz aus. - ich hab nun beispielsweise in meiner .txt folgendes stehen:
daten_aus_feld1~daten_aus_feld2~daten_aus_feld3~daten_aus_feld4
daten_aus_feld1~daten_aus_feld2~daten_aus_feld3~daten_aus_feld4 (etc.)
nun möchte ich zu der ersten zeile auch alle darauffolgenden zeilen ausgeben lassen, aber das funktioniert irgendwie nicht. - hier ist dazu mein php code:
<?php
$uhrzeit = " (".date("d. F Y").")";
$entry = file("news.txt");
$zeile = "<br />";
$temp = count($entry)-1;
$element = implode("~",$entry);
$element = explode("~",$element);
$zeile.= "<div class="block">";
$zeile.= "<h1 class="label" style="font-size:1.2em; top:-0.5em;">"."$element[0].</h2>"."<span class="klein">".$uhrzeit."</span>";
$zeile.= "<p style="font-size:1em;">".$element[3]."</p>";
$zeile.= "</div>";
echo $zeile;
?>
kann mir wer von euch helfen?
danke im voraus -
lg
azok(=freak)
hi!
<?php
$uhrzeit = " (".date("d. F Y").")";
$entry = file("news.txt");
for($i=0;$entry[$i];$i++)
{
$element=explode('~',$entry[$i]);
echo "<br />";
echo "<div class="block">";
echo "<h1 class="label" style="font-size:1.2em; top:-0.5em;">"."$element[0].</h2>"."<span class="klein">".$uhrzeit."</span>";
echo "<p style="font-size:1em;">".$element[3]."</p>";
echo "</div>";
echo $zeile;
}
echo 'keine Schleife? keine zweite Zeile! ;)';
?>
Gruß aus Berlin!
eddi
hi!
}
echo 'keine Schleife? keine zweite Zeile! ;)';?>
danke... - hatte das völlig übersehen
Gruß aus Berlin!
eddi
lg
azok(=freak)
hi!
wenn deine daten so vorliegen
daten_aus_feld1~daten_aus_feld2~daten_aus_feld3~daten_aus_feld4
daten_aus_feld1~daten_aus_feld2~daten_aus_feld3~daten_aus_feld4
und zeilenweise ausgelesen werden sollen, würde ich das so machen:
<?php
$uhrzeit = " (".date("d. F Y").")";
$entry = file("news.txt");
$zeile = "<br />";
//$temp = count($entry)-1;
//$element = implode("~",$entry); //was soll das an dieser stelle?
foreach($entry as $line) //jedes arrayfeld (=zeile der datei) durchgehen
{
if(count($line) != 0) // check zeilenlänge
{
$element = explode("~",$line);
$zeile.= "<div class="block">";
$zeile.= "<h1 class="label" style="font-size:1.2em; top:-0.5em;">"."$element[0].</h2>"."<span class="klein">".$uhrzeit."</span>";
$zeile.= "<p style="font-size:1em;">".$element[3]."</p>";
$zeile.= "</div>";
echo $zeile;
}
}
?>
anders gesagt: die schleife hat gefehlt ;)
deine ausgabe habe ich mir jetzt aber nicht angesehen...
viele grüsse,
andi
Hi!
$element = implode("~",$entry);
$element = explode("~",$element);
Diese zwei Zeilen gefallen mir. Die kommen meinem Programmierstil nahe.
Schöne Grüße
Julian
Hallo azok!
Du möchtest nun die Datei wieder auslesen? Der Inhalt einer Datei sieht ungefähr so aus?
Datei: news.txt
---8<---------------------------------------------------------------------------
feld1a~feld2a~feld3a~feld4a
feld1b~feld2b~feld3b~feld4b
...
---8<---------------------------------------------------------------------------
In deinem Quellcode steht:
$element = implode("~",$entry);
Die Funktion "implode()" macht aus einem Array einen einzigen String, wobei die einzelnen Einträge im Array aneinandergehanden werden und jeweils dazwischen wird ein das Zeichen des ersten Parameters eingefügt -- in diesem Fall "~".
Daraus würde dann folgender String (echo $element):
feld1a~feld2a~feld3a~feld4a~feld1b~feld2b~feld3b~feld4b
Folgende Zeile bewirkt:
$element = explode("~",$element);
Dass in $element ein Array angelegt wird und der obige String anhand des Seperators "~" getrennt wird.
Daraus würde dann folgender Array:
$element = Array => [0] => "feld1a"
[1] => "feld2a"
[2] => "feld3a"
[3] => "feld4a"
[4] => "feld1b"
[5] => "feld2b"
[6] => "feld3b"
[7] => "feld4b"
Der Lösungansatz für dein Problem:
1. Datei zeilenweise auslesen.
2. Jede Zeile anhand des Seperators "~" in die einzelnen Felder splitten
3. Gewünschte Felder ausgeben
Folgend drei Implementierungsvorschläge (ohne Gewähr auf Richtigkeit und Fehlerfreiheit *g*):
Vorschlag A:
---8<---------------------------------------------------------------------------
$fp = @fopen("news.txt", "r") or die ("Kann Datei nicht lesen."); // Datei(-pointer) öffnen
$i = 1; // Zeilenzähler
while ($zeile = fgets($fp, 1024)) { // Zeilenweises auslesen
$element = explode("~", $zeile); // Zeile in Felder splitten
echo "Zeile: ".$i++." ";
foreach($element as $k => $v) // Alle Felder ausgeben
{ echo "Feld ".$k.": ".$v."; "; } // Ausgabe Feld-Nr. und Inhalt
echo "\n";
}
fclose($fp); // Datei(-pointer) schliessen
---8<---------------------------------------------------------------------------
Vorschlag B:
---8<---------------------------------------------------------------------------
$fileArray = file("news.txt"); // Datei auslesen und zeilenweise in ein Array legen
$i = 1; // Zeilenzähler
foreach($fileArray as $zeile) { // Schleife: Zeile für Zeile
$element = explode("~", $zeile);
echo "Zeile: ".$i++." ";
foreach($element as $k => $v) // Alle Felder ausgeben
{ echo "Feld ".$k.": ".$v."; "; } // Ausgabe Feld-Nr. und Inhalt
echo "\n";
}
---8<---------------------------------------------------------------------------
Vorschlag C:
---8<---------------------------------------------------------------------------
$fp = fopen ("news.txt", "r"); // Datei(-pointer) öffnen
$i = 1; // Zeilenzähler
// Datei Zeilenweise auslesen. Felder aus der Zeile splitten und als Array zurückgeben
while (($element = fgetcsv ($fp, 1024, "~")) !== FALSE ) {
echo "Zeile: ".$i++;
foreach($element as $k => $v) // Alle Felder ausgeben
{ echo "Feld ".$k.": ".$v."; "; } // Ausgabe Feld-Nr. und Inhalt
echo "\n";
}
fclose ($fp); // Datei(-pointer) schliessen
---8<---------------------------------------------------------------------------
Ausgabe:
---8<---------------------------------------------------------------------------
Zeile 1: Feld 0: feld1a; Feld 2: feld2a; Feld 3: feld3a; Feld 4: feld4a;
Zeile 2: Feld 0: feld1b; Feld 2: feld2b; Feld 3: feld3b; Feld 4: feld4b;
---8<---------------------------------------------------------------------------
Ich hoffe, dass hilft dir weiter.
Mehr Informationen:
- dclp-FAQ: 13.1. Wie kann ich eine Datei auslesen?
http://www.dclp-faq.de/q/q-datei-lesen.html
- PHP-Handbuch: implode()
http://de3.php.net/manual/de/function.implode.php
- PHP-Handbuch: explode
http://de3.php.net/manual/de/function.explode.php
- PHP-Handbuch: fgetcsv()
http://de3.php.net/manual/de/function.fgetcsv.php
- PHP-Handbuch: file()
http://de3.php.net/manual/de/function.file.php
- PHP-Handbuch: fopen()
http://de3.php.net/manual/de/function.fopen.php
- PHP-Handbuch: fclose()
http://de3.php.net/manual/de/function.fclose.php
Hello,
hinzuzufüge ist noch, dass zwischen dem Empfang der Daten ($_POST) und dem Serialisieren der Felder zu einer Zeile (Datensatz) auf jeden fall der Seperator (~) und das/die Zeilenendezeichen aus den Daten entfernt bzw. ersetzt werden müssen. Sonst geht diese Art der Speicherung schief.
Harzliche Grüße aus http://www.annerschbarrich.de
Tom