Seite 1 von 1

[Funktion]CSV-Dateien Assoziativ Parsen

Verfasst: Do Jul 11, 2013 10:33 pm
von darksider3
Hallo,
PHP bietet, wie evtl. bekannt, mehrere Funktionen an um CSV-Daten/Dateien zu verarbeiten. Leider macht das keiner dieser Funktionen "Valide"(D.h es ist nicht möglich, Assoziativ zuzugreifen obwohl "Headlines" definiert wurden).
Ich habe aufgrund dessen mal ein bisschen Rumgetippselt, um eine solche Funktion für mich zu schaffen. (Aufgrund Dieses Postings hier)
Die Rückgabe der Funktion sieht so aus:
Array(1)
{
[0]=>array(3)
{
[Feld1]=>"Inhalt1";
[Feld2]=>"Inhalt2";
[Feld3]=>"Inhalt3";
}
}
...Und hier die Funktion dazu:(Achtung: parst nur Dateien durch Dateizugriffe)

Code: Alles auswählen


<?php
/**
 * Returns a multi-dimensional array from a CSV file optionally using the
 * first row as a header to create the underlying data as associative arrays.
 * @param string $file Filepath including filename
 * @param bool $head Use first row as header.
 * @param string $delim Specify a delimiter other than a comma.
 * @param int $len Line length to be passed to fgetcsv
 * @return array or false on failure to retrieve any rows.
 */
function importcsv($file,$head=true,$delim=";",$len=1000) {
    $return = false;
    $handle = fopen($file, "r");
    if ($head) {
        $header = fgetcsv($handle, $len, $delim);
    }
    while (($data = fgetcsv($handle, $len, $delim)) !== FALSE) {
        if ($head AND isset($header)) {
            foreach ($header as $key=>$heading) {
                $row[$heading]=(isset($data[$key])) ? $data[$key] : '';
            }
            $return[]=$row;
        } else {
            $return[]=$data;
        }
    }
    fclose($handle);
    return $return;
}
//@DEBUG=print_r(importcsv("./articles/db",true,";",20000));
?>
Ich hoffe das kann irgendjemanden irgendwann mal Helfen..^^

MfG

Re: [Funktion]CSV-Dateien Assoziativ Parsen

Verfasst: Mi Jul 17, 2013 1:11 pm
von Dominik
Bei kleinen Dateien könnte das sicherlich nützlich sein.

Im normalfall sind allerdings CSV/XML Dateien groß Importe/Exporte und dann ist es nicht ratsam dies alles in eine Variable abzulegen.

Re: [Funktion]CSV-Dateien Assoziativ Parsen

Verfasst: Mi Jul 17, 2013 4:02 pm
von darksider3
...Wieso glaubst Du, dass dies nicht passiert?
Ich Cache das ganze für 5 Minuten, frage ab ob der Cache noch Funktioniert und, falls es nicht mehr vorhanden ist, wird es in einer APC Variable gecached. Das gehört aber zu keiner Funktion. Ich habe das nur in der Hoffnung, das es manchen Helfen könnte veröffentlicht.

BTW und was Tut das zur Sache? Die Funktion soll nicht cachen, diese soll holen. Das dann zu Cachen ist eine andere Angelegenheit…

Re: [Funktion]CSV-Dateien Assoziativ Parsen

Verfasst: Mi Jul 17, 2013 10:28 pm
von Dominik
Schon allein eine solche zuweißung $x = stuff; belegt den Speicher von PHP, was du danach machst ist wieder ein anderes Thema und irrelevant.

Ich wollte es hier nur Anmerken falls doch jemand auf die Idee kommt und das Beispiel für sich verwenden möchte, dass er weiß das er das nicht bei großen Dateien andwenden sollte

Re: [Funktion]CSV-Dateien Assoziativ Parsen

Verfasst: Do Jul 18, 2013 9:03 am
von darksider3
Lustig, da PHP keinen "Speicher" hat, der eine bestimmte Menge groß ist.

Jedenfalls hat dies auch bei einer 4,7MB großen CSV-Datei geklappt, und der Speicher war nicht "belegt".

Re: [Funktion]CSV-Dateien Assoziativ Parsen

Verfasst: Do Jul 18, 2013 2:04 pm
von Dominik
Klar belegt PHP einen Speicher. Wie jede Sprache.

Mit Funktionen wie zb memory_get_usage() kannst du dir den aktuellen Verbrauch auch anzeigen lassen. (die php config deckelt auch ab bestimmten Größen ab)

Dateien mit 4,7MB kann man zur Not ja auch noch selbst abtippen ;)

Das ist ja keine Kritik. Brauchst dich auch nicht angegriffen fühlen. War nur der eigentlich dezente Hinweiß.

Re: [Funktion]CSV-Dateien Assoziativ Parsen

Verfasst: Mo Jul 22, 2013 1:39 am
von darksider3
Klar belegt PHP einen Speicher. Wie jede Sprache.

Mit Funktionen wie zb memory_get_usage() kannst du dir den aktuellen Verbrauch auch anzeigen lassen. (die php config deckelt auch ab bestimmten Größen ab)
Ich habe langsam dass Gefühl, dass Du mich unterschätzt mein Freund :)
Ich habe nicht behauptet, dass PHP keinen Speicher habe - ich habe gesagt, dass ich es auf meinem Lokalen system Ausprobiert habe und mir währenddessen auch den Belegten Speicher Ausgeben lassen - Das überschätzt Du ein bisschen.
Das ist ja keine Kritik. Brauchst dich auch nicht angegriffen fühlen. War nur der eigentlich dezente Hinweiß.
Fühle mich nicht Angegriffen, kommt mir eher so vor, als wenn mich jemand wie ein "Schuljunge" behandeln würde ;)

Dezente Kritik kann man auch in Form von Code ausüben - Dies sagt meist mehr aus, als ein Kleiner Text :)