CSV Datei einlesen

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • CSV Datei einlesen

    Hallo!
    Ich habe eine CSV Datei in der ich diverse Sachen überpüfen muss!
    Zum einen will ich rausfinden, wieviel Einträge in dem Feld $data[3] den Wert "DE" enthalten!
    In der CSV sind es weit über 300 Einträge, wenn ich jedoch die Anzahl ausgebe sind es nur 60 Stück.
    In der CSV befinden sich ca 9000 Einträge, weshalb ich dbei fgetcsv den Wert auf 10000 gestellt habe. Komischerweise werden umso mehr Einträge angezeigt, je niedriger ich die Zahl mache! Kann mir da jemand helfen?
    Hier mein Code:

    PHP Code:
    while ( ($data fgetcsv ($handle10000";")) !== FALSE ) { 
                
                if(
    $data[3]=="DE")  //Nur DE auslesen
                
    {
                    echo 
    $data[3];
                }


  • #2
    Informiere dich zuerst mal, was der zweite Parameter von PHP: fgetcsv - Manual genau macht
    Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
    Schön - etwas Geschichte kann ja nicht schaden.
    Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

    Comment


    • #3
      Ich habe gestern auch noch einen CSV Import programmiert. Fragt mich nicht warum, aber zwischen der herkömmlichen fgetcsv Funktion und der SPL liegen Welten. Die SPL scheint mit dem SplFileObject sehr viel schneller zu laufen. Dazu dann noch die Behandlung des ermittelten Arrays aus der CSV Datei mit einem der SPL ArrayIteratoren und schon bist Du auf der sicheren Seite.

      Ich würde an Deiner Stelle auf jeden Fall die SPL vorziehen.
      MM Newmedia | MeinBlog

      Comment


      • #4
        Ich hab mich darüber informiert! Genau das habe ich doch auch gesagt:
        "Length muss größer sein als die längste in der CSV-Datei vorhandene Zeile"
        Deswegen meinte ich ja dass ich um die 9000 Zeilen habe und deshalb die Länge 10000 gewählt habe!
        Kann mir da jemand helfen?

        Comment


        • #5
          Dann lies nochmal genau! Es kommt nicht drauf an, wieviele Zeilen deine CSV-Datei hat, sondern wieviele Zeichen die längste Zeile hat.

          Wenn du nur 10 Zeilen in deiner Datei hast und nur eine Zeile davon z.B. 10001 Zeichen enthält, bekommst du ein Problem.

          Guck dir aber auch mal den vierten Parameter an - evtl. rührt auch daher dein Problem.
          Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
          Schön - etwas Geschichte kann ja nicht schaden.
          Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

          Comment


          • #6
            Sorry, aber ich chekcs absolut nicht!!
            Also hier mal eine Zeile aus der CSV:
            PHP Code:
            1220;1220;;DE;1444;München;;Bahnhof;;11233;533212;Bayern;27;True;227
            Insgesamt habe ich davon über 900 Zeilen mit diversen Inhalten.
            Und jetzt bedeutet der zweite Paramter wieviel Zeichen ich in eienr Zeile habe?? Sorry, aber ich bin gerade total raus!

            Comment


            • #7
              Originally posted by Kangarooo View Post
              Und jetzt bedeutet der zweite Paramter wieviel Zeichen ich in eienr Zeile habe??
              PHP: fgetcsv - Manual

              Das hier ist kein Manual-Vorleseservice, also informiere dich bitte selber, wenn du programmieren willst.
              I don't believe in rebirth. Actually, I never did in my whole lives.

              Comment


              • #8
                Wie soll ich es genauer beschreiben, als es im Manual steht?

                fgetcsv will wissen, wie lange eine Zeile maximal sein kann. Du kannst dabei einen Wert eintragen, bei dem du dir z.B. absolut sicher bist, dass keine Zeile in deiner Datei länger sein wird. Du musst nur sicherstellen, dass du keinen Wert angibst, der kleiner als die längste Zeile in deiner Datei ist. Eine Möglichkeit ist z.B. auch, die Größe der Datei auszulesen und einfach diesen Wert zu benutzen.

                Aufgrund deiner geposteten Beispiel-Zeile gehe ich aber eh davon aus, dass dein Problem nicht daher rührt. Da deine Datei kein enclosure-Zeichen benutzt scheidet auch das aus.

                Ich würde mir einfach mal in deiner Schleife $data mit var_dump() ausgeben lassen (ausserhalb deiner if-Abfrage) und schauen, ob in dem Array auch wirklich jedesmal das drinsteht was du erwartest. Ist zwar bei 900 Datensätzen evtl. mit etwas Kopfweh verbunden aber einen besseren Tipp hab ich auf Anhieb auch nicht mehr parat.
                Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
                Schön - etwas Geschichte kann ja nicht schaden.
                Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

                Comment


                • #9
                  Alles klar, vielen Dank! Mittlerweile habe ich glaube ich auch festgestellt dass etwas mit der CSV Datei nicht stimmt! Ich habe jetzt mal eine andere benutzt und mit der funktioniert es einwandfrei mit der length!! Trotzdem VIELEN DANK für Deine Hilfe!!!

                  Comment


                  • #10
                    Originally posted by ezkimo View Post
                    I...Fragt mich nicht warum, aber zwischen der herkömmlichen fgetcsv Funktion und der SPL liegen Welten...
                    Hast du beim normalen fgetcsv den length-Parameter weggelassen? Das Manual sagt, dass es in dem Fall etwas langsamer ist.
                    Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
                    Schön - etwas Geschichte kann ja nicht schaden.
                    Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

                    Comment


                    • #11
                      Originally posted by Quetschi View Post
                      Hast du beim normalen fgetcsv den length-Parameter weggelassen? Das Manual sagt, dass es in dem Fall etwas langsamer ist.
                      Nein, der length-Parameter war gesetzt und ausreichend. Bei der SPL fällt der length Parameter von vornherein weg.

                      Kurzes Beispiel für die SPL
                      PHP Code:
                      $file = new SplFileObject("meineDaten.csv");
                      $data = new ArrayObject();
                      $data->setIteratorClass('RecursiveArrayIterator');

                      // CSv Daten ermitteln
                      while (!$file->eof()) {
                          
                      $data[] = $file->fgetcsv(";"));
                      }

                      // Array durchlaufen
                      $iterator $data->getIterator();
                      while (
                      $iterator->valid()) {
                          if (
                      $iterator->hasChildren()) {
                              foreach (
                      $iterator->getChildren() as $key => $value) {
                                  
                      // Mache irgendwas mit meinen Datensätzen
                              
                      }
                          }
                          
                      $iterator->next();

                      Eigentlich recht simpel.
                      MM Newmedia | MeinBlog

                      Comment

                      Working...
                      X