Tom: .csv Datei aulesen Ausgabe mit einem Array

Beitrag lesen

Hello,

Die abcd.csv enthält Daten wie z.B:

jahr;author;titel;seitenanzahl...
1991;hans;froeliches-schaffen;125

nach der Speicherung in ein Array, möchte ich dieses natürlich auch wieder ausgeben lassen. Das mit dem Ausgeben klappt soweit, gar nicht mal so schlecht, aber nur dann, wenn ich die function entferne und die Ausgabe mit in den Bereich zum Auslesen stecke. Daher meine Frage lässt sich dies auch anders lösen?

hier der Codeschnipsel:

<?php

function fkt_hohleDaten()
{
$daten = file('abcd.csv');
$zeilen = count($daten);
for ($c=0; $c<$zeilen; $c++)
{
$datensatz = explode (";", $daten[$c]);
}
}

function holeDaten($filename, &$_buffer, $maxrecsize=4098)
   {
       $fh = fopen($filename,'r');     ## Datei zum lesen öffnen
       if (!$fh) { return 5 };         ## Datei konnte nicht geöffnet werden

if (!flock($fh, LOCK_SH)        ## Datei sperren, um ungestört LESEN zu können [1]
       {                               ## Sperre hat nicht geklappt,
           fclose($fh);                ## Datei daher wieder schließen
           return 8;                   ## Datei konnte nicht gesperrt werden, Funktion abbrechen
       }

$_rec = array();                ## einen leeren Buffer für einen Datensatz bereitstellen

## ganze Datei auslesen solange das Lesen erfolgreich ist
       while ($false !==($rec = fgetcsv($fh, $maxrecsize, ';', '"'))
       {
           $_buffer[] = $_rec;
       }

fclose($fh);                    ## Datei schließen und Sperrung aufheben.
       return 0;                       ## kein Fehler aufgetreten
   }

fkt_hohleDaten();
    echo '<pre>';
print_r ($datensatz);
    echo '</pre>';

$_buffer = array();                ## leeren Buffer für dire Daten bereitstellen
    $err_hd = holeDaten('abcd.csv',$_buffer);  ## Leeren Buffer
                                               ## und Dateinamen an holeDaten() übergeben

if ($err_hd == 0)
    {
        echo "<pre>\r\n";
        echo htmlspecialchars(print_r($_buffer,1));
        echo "</pre>\r\n";
    }
    else
    {
        echo "<p>Fehler beim Lesen von <strong>".htmlspecialchars($filename).": $err_hd <p>\r\n";
    }

So ungefähr würde ich mir das vorstellen.
Die Funktion bekommt den Namen der Datei und einen (leeren) Buffer für die Daten übergeben. Dieser Buffer muss ein Array sein. Das wird in der Funktion nicht geprüft! Ein Prüfung kann man aber auch noch einbauen, wenn man sich selber nicht traut ;-)
Es wird versucht, die datei zu öffnen. Wenn dies fehlschlägt, wird die Funktion verlassen und der Buffer bliebt unverändert. Die Fehlernummer, die die Funktion zurückgibt, gibt aufschluss darüber, warum die Funktion verlassen wurde.

Als nächstes wird geprüft, ob die Datei gerade bearbeitet wird, oder ob sie noch zum Lesen sperrbar ist. Solange Du im gesamten Vorgang nur Informationen lesen willst, reicht ein LOCK_SH (Lesesperre). Diese Sperre verhindert, dass während jemand liest (beliebig viele Teilnehmer) jemand anderes (nur ein einzelner kann das zur Zeit) Daten in der Datei verändert.

Wenn das klappt, wir in einer Schleife solange CSV-Format ausgelesen, wie die Datei lesbar ist.

[1] wenn man eine Datei mit LOCK_SH öffent, um sie auszulesen, darf man ohne weitere Maßnahmen später keine Änderungen in ihr vornehmen, auch wenn man dann später LOCK_EX benutzen würde. Schau Dir hierzu den Artikel con Chsritian Seiler an, der viele Grundlagen dazu vermittelt.
[link:http://aktuell.de.selfhtml.org/artikel/programmiertechnik/dateisperren/]

?>


>   
> MfG  
> Brainkeks  

Liebe Grüße aus Syburg bei Dortmund  
  
Tom vom Berg  
![](http://selfhtml.bitworks.de/Virencheck.gif)  
  

-- 
Nur selber lernen macht schlau  
<http://bergpost.annerschbarrich.de>