Webdesign in Siegen

csv-Datei in Array

Fragen zum Thema PHP können hier gestellt werden

Moderator: Basti

csv-Datei in Array

Beitragvon thebiker am 25.07.2007, 15:01

Also eine schön mit Komma getrennte CSV Datei ist ja kein Problem in einem 2 dimensionales Array zu kriegen.

ich hab das so gelöst:
Code: Alles auswählen
$datei = file("CSV-File.csv");

foreach($datei as $lingia){
    $eigen[$i] = explode(",", $lingia);
    $i++;
}


Jetzt sollte mein Skript Kommazeichen die in " " stehen ignorieren und nicht in einem neuen Array setzten

Beispiel
Code: Alles auswählen
string1, string2, "string3, und immer noch string3", string4, string5


Wie kann man das am einfachsten lösen?
***********************************************
wer kämpft kann verlieren wer nicht kämpft hat schon verloren
***********************************************
thebiker
Mitglied
 
Beiträge: 23
Registriert: 06.06.2007, 19:10
Wohnort: CH

Beitragvon Manuel am 25.07.2007, 18:05

Hui, nettes Problem.

Ich glaube ich stehe gerade auch ein wenig auf dem Schlauch. Was mir spontan eingefallen wäre ist, mit einem regulären Ausdruck einfach alle Kommas, die nicht zwischen " stehen zu ersetzen durch ,, und das dann in der explode-Funktion zu verwenden. Ob das aber nun wieder so einfach machbar ist mit einem regulären Ausdruck...eigentlich müsste das gehen.

Vielleicht fällt mir ja eine schönere Methode ein...oder jemand anderes...war nur gerade ein Gedanke, der ja vielleicht schon einen Tick weiter hilft dann.

Lg,
Manuel ;-]
Benutzeravatar
Manuel
Site Admin
 
Beiträge: 9114
Registriert: 10.12.2004, 19:29
Wohnort: Asbach

Beitragvon Basti am 25.07.2007, 18:07

Das dürfte ziemlich schwierig werden, dass zu unterscheiden, das ginge vielleicht noch mit RegEx, aber ich denke das wäre sehr umständlich.

Falls du die Trennungszeichen ändern kannst würde ich dir deshalb empfehlen, andere zu nehmen, um sie dann später wieder mit explode() auseinanderzunehmen.

So ein Trennungszeichen sollte möglichst nicht in den verschiedenen Arrayelementen vorkommen, damit auch wirklich da getrennt wird, wo es so vorgesehen ist.
Am ist eine Kombination aus mehreren Zeichen (z.B. "#%&").

Vielleicht konnte dir das ja weiterhelfen, ansonsten kannst du dich ja nochmal melden und dann müssen wir nach einer anderen Lösung suchen ;)
Benutzeravatar
Basti
Moderator
 
Beiträge: 1974
Registriert: 15.06.2006, 17:33
Wohnort: Rheinbreitbach

Beitragvon thebiker am 26.07.2007, 13:20

zuerst mal Danke für die schnelle Antwort und für die Lösungsmöglichkeiten. Ich habe mal etwas zusammengebastelt.

Es funktioniert, aber vielleicht gibt es noch gewisse Punkte die man verbessern könnte, oder?

Code: Alles auswählen
      $datei = file("LiegEgt.csv");

      foreach($datei as $lingia){
         if(strpos($lingia, '"')){
            $eigen_temp[$i] = explode('"', $lingia);
            $m=0;
            $ganzstring = "";
            foreach($eigen_temp[$i] as $str_anfuerungsz){
               $m++;
               if(($m % 2) == 0){
                  $str_anfuerungsz = str_replace(",","|",$str_anfuerungsz);
               }
               $ganzstring = $ganzstring. $str_anfuerungsz;
               
            }
            $eigen[$i] = explode(',', $ganzstring);
            $n = 0;
            foreach($eigen[$i] as $ersetzen){
               $eigen[$i][$n] = str_replace("|",",",$ersetzen);
               $n++;
            }

         }else{
            $eigen[$i] = explode(',', $lingia);
         }
         $i++;
      }
         




Kurze Erklärung:
Zuerst prüfe ich wenn " Zeichen vorhanden sind, wenn ja dann auf " Zeichen aufsplitten danach mit modulo die Stringteile die in Anführungs und Schlusszeichen waren ausfiltrieren. Die ausfiltrierte String Stücke die Kommas mit | ersetzen. Danach string wider zusammen setzen und auf Komma aufsplitten, zu letzt noch die | wider mit Komma ersetzen.
***********************************************
wer kämpft kann verlieren wer nicht kämpft hat schon verloren
***********************************************
thebiker
Mitglied
 
Beiträge: 23
Registriert: 06.06.2007, 19:10
Wohnort: CH

Beitragvon Manuel am 27.07.2007, 12:38

Kurze, aber wichtige Frage: Wie oft wird dieser Algorithmus verwendet und wird dieser oft zur Laufzeit verwendet oder ist das eher eine Seltenheit? Denn dementsprechend müsste man sich überlegen ob man optimiert oder nicht.

Lg,
Manuel ;-]
Benutzeravatar
Manuel
Site Admin
 
Beiträge: 9114
Registriert: 10.12.2004, 19:29
Wohnort: Asbach

Beitragvon thebiker am 30.07.2007, 21:23

danke für deine Antwort...

dieser Skript brauche ich für einen Update, und der wird jeden Monat etwa 20 Tausend Zeilen einlesen müssen :wink: ....
da es aber nicht für die Besucher direkt gebracht wird ist die Geschwindigkeit nicht so entscheidend,...ich dachte vielleicht sieht jemand einen gröberen Fehler was das ganze Skript bremst, da ich php-Anfänger bin, weis ich noch nicht wirklich auf was man achten muss betreffend Geschwindigkeit
***********************************************
wer kämpft kann verlieren wer nicht kämpft hat schon verloren
***********************************************
thebiker
Mitglied
 
Beiträge: 23
Registriert: 06.06.2007, 19:10
Wohnort: CH


Zurück zu PHP

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste