PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Datei umgekehrt auslesen.


maiskolben
22.08.2006, 09:16:08
Wie kann ich am besten eine Datei umgekehrt auslesen?
Alle letzten EInträge sollen zuerst angezeigt, oder zuerst geschrieben werden...
$_POST["eintrag"]["datum"] .= "§ "; // § ist trennzeichen der Einträge.
$datum = fopen($root . "datum.txt", "a+");
fwrite($datum, $_POST["eintrag"]["datum"]);
fclose($datum);
LG maiskolben

{PS: ich meinte natürlich, alle letzten Einträge sollten _zuletzt_ geschrieben, oder _zuletzt_ gelesen werden... Jetzt ergibt das einen Sinn! :-)}

DominikJ
22.08.2006, 09:25:10
wenn du die daten aus der datei in ein arary liest folgendes:
array_reverse (http://de.php.net/manual/de/function.array-reverse.php)

maiskolben
22.08.2006, 09:33:37
Danke DominikJ, doch ich lese die Werte aus der Textdatei nicht wie ein Array mit der foreach-Schleife aus, sondern der Index wird mit einem Trennzeichen indiziert...

Mir würde es mehr helfen wenn ich wüsste wie ich anhand des obigen Beispiels den geschriebenen Eintrag als _ersten_ Eintrag in die Datei schreiben kann...

LG maiskolben

Andes
22.08.2006, 09:38:51
Das geht so nicht, da 'a' den Zeiger zum Schreiben an das Ende setzt. Ohne deine Datei vor dem Schreiben aus zu lesen wird es nicht gehen. Du müsstest deine Datei auslesen und den neuen Eintrag an den Anfang setzen und die Datei neu schreiben.

maiskolben
22.08.2006, 10:00:37
Also die Datei auslesen, die indizierung der Trennzeichen neu vornehmen, nur wie setzte ich denn danach den Zeiger an den Anfang?
LG maiskolben

{PS: Also das sähe dann bei mir so aus:
$_POST["eintrag"]["datum"] .= "§ ";
$datum = fopen($root . "datum.txt", "a+");
$datumr = array_reverse($_POST["eintrag"]["datum"] .= "§ ");
fwrite($datumr, $_POST["eintrag"]["datum"]);
fclose($datumr);
}

Andes
22.08.2006, 10:17:55
Mit 'w' wird die Datei neu geschrieben.

DominikJ
22.08.2006, 10:18:53
ein fopen() (http://de.php.net/manual/de/function.fopen.php) mit w

maiskolben
22.08.2006, 11:09:46
w, w+ und r+ überchreiben mir die koplette Datei!
Wie schaffe ich es denn, dass der restliche Inhalt beibehalten wird??

LG maiskolben
{PS: habe den Beitrag nun komplett verändert...}

Andes
22.08.2006, 12:13:18
Gar nicht. Du musst erst deine Datei zum Lesen öffnen. Den Inhalt deiner Datei auslesen und deinen neuen Eintrag davor setzen. Anschließende öffnest du die Datei zum neu schreiben und überschreibst den Inhalt mit dem zuvor ausgelesenen und bearbeiteten Inhalt.

- Datei auslesen
- Inhalt in Variable schreiben
- Datei schließen
- neuen Eintrag vor Inhalt setzen
- Datei zum schreiben öffnen
- neuen Inhalt in Datei schreiben
- Datei schließen

maiskolben
22.08.2006, 12:44:58
Ich kann den neuen Inhalt nicht davor setzen! Mit fwrite (w+, r+, w etc) überschreibe ich den kompletten Inhalt. Und mit fputs(); überchreibe ich die Zeichen um die Länge, die der neue Eintrag lang ist...

Bitte erkläre mir das am folgenden Beispiel:
$_POST["eintrag"]["datum"] .= "§";
$datum = fopen($root . "datum.txt", "r+");
fwrite($datum, $_POST["eintrag"]["datum"]);
fclose($datum);

LG maiskolben

Andes
22.08.2006, 12:57:22
Was ist daran so schwer zu verstehen? Du sollst den Inhalt deiner Datei in eine Variable schreiben und nicht versuchen da irgendwas einzufügen. Die Variable kannst du dann zum Verarbeiten deines Inhalts nutzen und mit den überarbeiteten Wert der Variable überschreibst du dann mit 'w' den Inhalt deiner Datei. So gehen dir keine Inhalte der Datei verloren und dein neuer Eintrag steht am Anfang.

maiskolben
22.08.2006, 13:31:10
Ja! Wärst Du so freundlich mir das anhand des obigen Beispiels zu verdeutlichen, wie Du das meinst?? Ich überschreibe mir trotzdem den bestehenden Inhalt um die Länge, die die neue Zeile lang ist!

LG und danke,
maiskolben

Andes
22.08.2006, 15:15:31
$inhalt = Daten aus Datei gelesen;
$neuer_eintrag = Wert;
$neuer_inhalt = $neuer_eintrag.$inhalt;
in Datei schreiben = $neuer_inhalt;

Das dürfte ja nun als Hilfe und Denkanstoß genügen?
Du musst halt deine Datei zwei Mal öffnen. Einmal zum Lesen und ein Mal zum Schreiben.

maiskolben
22.08.2006, 21:02:41
Alles klar Andes, vielen Dank für die Hilfe! Habe es hinbekommen!
:- LG maiskolben