Tom: fread --> explode --> explode problem, verständnis

Beitrag lesen

Hello,

$fh = fopen($dateiname, 'r+');
$lock_ok = flock($fh, LOCK_EX);
$file = fread($fh, filesize($dateiname));

$_file = explode("\n",$file);

bis hierhin klappt es auch

Dann solltest Du Dir Deine Liste nicht kaputtmachen mit dem nächsten Statement

$_zeile[$znr] = explode("|",$_file[$znr]);

in $file ist die gesamte Datei als String gespeicht.
in $_file ist dann nach dem explode die Datei als Array von Zeilen gespeichert
in $_zeile wäre dann, wenn du es für alle Zeilen machst, das Array der Zeilen, die aufgeteilt in Felder sind, gespeichert.

$_zeile = array();                  ## leeres Array bereitstellen

foreach($_file as $key => $val)     ## jede Zeile in $_file bearbeiten
  {
    $_zeile[$key] = explode('|',rtrim($val));
  }

Du kannst dann über

echo $_zeile[$zeilennummer][$feldnummer];

auf jedes (vorhandene) Feld der "Tabelle" zugreifen und es auch schreibend manupulieren.

Um den Vorgang rückgängig zu machen, die Daten also wieder als im File ablegen zu können, verpackst Du erst die Zellen wieder

foreach ($_file as $key => $_val)
  {
    $_file[$key] = implode('|',$_val);     ## aus den Teilarrays Strings machen
  }

und verpackst dann das Array aus Zeilen wieder in einen String

$file = implode("\n",$_file);            ## Zeilenumbruch nach jedem Teilstring

$file kannst Du dann wieder in die Datei zurückschreiben.

Zur Kenntlichmachung, ob der erwartete Wert ein Skalar oder ein Array ist, nutze ich immer den Unterstrich

$file              sollte einen Skalar oder einen String enthalten
  $_file             sollte ein Array sein

Das ist von mir frei, aber analog zu $_POST, $_GET, $_SERVER usw. gewählt und hat sich bewährt.
Ich kann meine Scripte so viele leichter lesen :-)

Schau Dir bitte auch

http://www.php.net/manual/en/language.types.string.php

an.

Außerdem solltest Du beachten, dass bei diesem Verfahren in den Feldwerten bestimmte Zeichen nicht vorkommen dürfen. bei Dir sind dies:

|       Feldtrenner
 "\n"     Zeilenendezeichen

Das gibt sonst durcheinander

Harzliche Grüße vom Berg
http://www.annerschbarrich.de

Tom

--
Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
Nur selber lernen macht schlau