Nic: Phpmyadmin - CSV Import - Ungültige Anzahl an Feldern

Hallo!
Ich versuche grade eine recht große .CSV Datei(ca 30 000 Zeilen) in eine Tabelle zu übertragen, nur kommt immer die Fehlermeldung "Ungültige Anzahl an Feldern in Zele 24167".
Die Anzahl der Spalten ist genau gleich und wenn ich die komplette Zeile aus der CSV Datei lösche, gehts auch problemlos weiter..
Weiß jemand zufällig woran das liegen könnte?
Danke schonmal im voraus,
Gruß,
Nic

  1. Weiß jemand zufällig woran das liegen könnte?

    Daran, dass die Zeile eine ungültige Anzahl an Feldern[sic!] hat.

    Wie wärs, wenn du die Zeile einfach mal überprüfst und die Trennzeichen zählst und schaust, ob die Feldwerte ordentlich in Begrenzer eingeschlossen sind.

  2. Hello,

    Ich versuche grade eine recht große .CSV Datei(ca 30 000 Zeilen) in eine Tabelle zu übertragen,

    in was für eine Tabelle?

    nur kommt immer die Fehlermeldung "Ungültige Anzahl an Feldern in Zele 24167".

    Wer gibt diese Fehlermeldung?

    Die Anzahl der Spalten ist genau gleich und wenn ich die komplette Zeile aus der CSV Datei lösche, gehts auch problemlos weiter..

    Und wie sieht die betroffene Zeile aus?

    Weiß jemand zufällig woran das liegen könnte?

    Am unsauberen Arbeiten?

    • keine sauberen Daten
    • keine eigensichere Importfunktion
    • keine vernünftige Fehlerbehanglung (durch den Programmierer, der uns hier schreibt)
    • ...

    Liebe Grüße aus dem schönen Oberharz

    Tom vom Berg

    --
     ☻_
    /▌
    / \ Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de
    1. Hey!
      Danke schonmal für die schnelle Antwort!

      Die Angaben waren durchaus ein wenig lückenhaft:
      Es geht bei der geanzen Geschichte um einen CSV Import über phpmyadmin. Die betreffende Zeile sieht aus wie jede andere(Mehrere Spalten, die durch ein ";" getrennt sind und ein Zeilenumbruch in der Datei bestimmt eine neue Zeile).

      Das mit der Unsauberen Arbeit kann man hier ausnahmsweise mal ausschließen, da es sich um eine Automatisch erstellte CSV Datei handelt, welche durch phpmyadmin importiert wird...

      1. Hello,

        Die Angaben waren durchaus ein wenig lückenhaft:
        Es geht bei der geanzen Geschichte um einen CSV Import über phpmyadmin. Die betreffende Zeile sieht aus wie jede andere(Mehrere Spalten, die durch ein ";" getrennt sind und ein Zeilenumbruch in der Datei bestimmt eine neue Zeile).

        Das mit der Unsauberen Arbeit kann man hier ausnahmsweise mal ausschließen, da es sich um eine Automatisch erstellte CSV Datei handelt, welche durch phpmyadmin importiert wird...

        Und wie lauten die Zeilen 24166, 24167 und 24168 nun?

        Willst Du uns weiterhin das bekannte Ratespiel durchführen lassen? Dann hätte ich gerne das rote Schweinchen. Schade nur, dass es keine 5-Euro-Münzen gibt.

        Liebe Grüße aus dem schönen Oberharz

        Tom vom Berg

        --
         ☻_
        /▌
        / \ Nur selber lernen macht schlau
        http://bergpost.annerschbarrich.de
        1. Om nah hoo pez nyeetz, Tom!

          Schade nur, dass es keine 5-Euro-Münzen gibt.

          gibt es wohl.

          Matthias

          --
          1/z ist kein Blatt Papier. http://www.billiger-im-urlaub.de/kreis_sw.gif
        2. 24.07.2011 10:47;in;Openport;bla@bla.de;lala@lala.de;bla@laz.de bulker@laeisz.de ;752;994;pagna  
          24\.07.2011 10:47;in;Openport;bla@blasz.de;who@nbla.com;"rss@lilly.com jasd@lilly.com ""gben.""@css.com ";776;1038;pagna  
          24\.07.2011 10:51;out;Openport;rrrr@rrl.com;rrr@palawer.de;;2498;5694;portland  
          
          
          1. Om nah hoo pez nyeetz, Nic!

            Du schriebst, dass das Weglassen der kompletten Zeile zum Erfolg führt. Hast du schon versucht, den Fehler weiter einzugrenzen, indem du zum Beispiel mal die Anführungszeichen weglässt? Zumindest stimmt die Anzahl der Semikola.

            Matthias

            --
            1/z ist kein Blatt Papier. http://www.billiger-im-urlaub.de/kreis_sw.gif
            1. Hey!
              Lag an den Anführungszeichen zwischen den Simokola..
              Vielen Dank für die Hilfe!

              1. Hi!

                Lag an den Anführungszeichen zwischen den Simokola..

                Ah ja. Dann arbeitet fgetcsv() vielleicht nicht richtig (wobei ein Test mit str_getcsv() unter 5.3.2 grad kein Problem ergab), das sicher auch der phpMyAdmin verwendet, denn die Verdopplung ist nach den CSV-Regeln korrekt.

                Als Alternative könnte der CSV-Import mit LOAD DATA gehen, dann interpretiert MySQL das CSV und das gibt im Handbuch vor, die Verdopplung zu erkennen.

                Lo!

          2. Hello,

            24.07.2011 10:47;in;Openport;bla@bla.de;lala@lala.de;bla@laz.de bulker@laeisz.de ;752;994;pagna

            24.07.2011 10:47;in;Openport;bla@blasz.de;who@nbla.com;"rss@lilly.com jasd@lilly.com ""gben.""@css.com ";776;1038;pagna
            24.07.2011 10:51;out;Openport;rrrr@rrl.com;rrr@palawer.de;;2498;5694;portland

              
            Dann würde das darauf hindeuten, dass der phpMyAdmin nicht richtig tickt, bzw. falsch konfiguriert ist. Die String-Delimiter für fgetcsv() müssen passend gesetzt sein. Bei PHP nennen die sich "enclosure"  
              
            <http://de3.php.net/manual/en/function.fgetcsv.php>  
              
              
              
              
            Liebe Grüße aus dem schönen Oberharz  
              
              
            Tom vom Berg  
            ![](http://selfhtml.bitworks.de/Virencheck.gif)  
              
            
            -- 
             ☻\_  
            /▌  
            / \ Nur selber lernen macht schlau  
            <http://bergpost.annerschbarrich.de>
            
            1. Hi!

              Die String-Delimiter für fgetcsv() müssen passend gesetzt sein. Bei PHP nennen die sich "enclosure"

              Das war vielleicht früher mal falsch bezeichnet, aber Delimiter ist die Bezeichnung für das Trennzeichen zwischen zwei Elementen. Enclosure ist der Einschluss (in Anführungszeichen beispielsweise). Das Problem könnte eher sein, dass die doppelten Anführungszeichen, die in CSV für ein maskiertes Anführungszeichen stehen, vielleicht nicht richtig erkannt werden. Das PHP-Handbuch zu fgetcsv() erwähnt nicht, dass das erkannt wird, beschreibt aber einen Escape-Zeichen-Parameter und den \ als Default-Escape-Zeichen.

              Lo!

              1. Hello,

                Die String-Delimiter für fgetcsv() müssen passend gesetzt sein. Bei PHP nennen die sich "enclosure"

                Das war vielleicht früher mal falsch bezeichnet,

                Die Begriffe werden heute falsch benutzt.
                In allen mir bekannten älteren Daten(bank)anwendungen hieß es immer im sogenannten SDF (Standard Data Format), was man heute als CSV bezeichnet...

                Seperator = Trennzeichen zwischen Feldern
                Delimiter = Begrenungszeichen des Feldes

                PHP nennt die Seperators Delimiters und die Delimiters Enclosure...

                Aber mal unabhängig von Wortspielen würde mich interessieren, um welche PHP-Version es sich handelt und welches Format das dazugehörige fputcsv() dann erzeugt.
                http://de2.php.net/manual/de/function.fputcsv.php

                dort steht nämlich auch die Verdoppelung beschrieben.

                Liebe Grüße aus dem schönen Oberharz

                Tom vom Berg

                --
                 ☻_
                /▌
                / \ Nur selber lernen macht schlau
                http://bergpost.annerschbarrich.de
                1. Hi!

                  Die Begriffe werden heute falsch benutzt.
                  In allen mir bekannten älteren Daten(bank)anwendungen hieß es immer im sogenannten SDF (Standard Data Format), was man heute als CSV bezeichnet...
                  Seperator = Trennzeichen zwischen Feldern
                  Delimiter = Begrenungszeichen des Feldes
                  PHP nennt die Seperators Delimiters und die Delimiters Enclosure...

                  Vielleicht nutzen dann diese älteren Anwendugnen den Begriff falsch. Oder der Begriff delimiter ist nicht eindeutig. Als Abgrenzungszeichen kann man die Abgrenzung zwischen den Feldern sehen - so beschreibt es die deutsche und englische Wikipedia - oder auch die Abgrenzung von Stringliteral zu restlichem Code - zumindest die englische erwähnt auch diese Verwendung. Insofern könnte man auch sagen, ein Separator separiere Stringliterale vom Rest.

                  Zumindest ist Enclosure näher an dem dran, was mit dem String passiert: Einschließen in Anführungszeichen.

                  Aber mal unabhängig von Wortspielen würde mich interessieren, um welche PHP-Version es sich handelt und welches Format das dazugehörige fputcsv() dann erzeugt.
                  http://de2.php.net/manual/de/function.fputcsv.php
                  dort steht nämlich auch die Verdoppelung beschrieben.

                  Ich kenne die Historie nicht und kann (weil ich nciht nachforschen will) nur mutmaßen, dass es so sein könnte, weswegen ich den Konjunktiv in meinen Antworten verwendete. Das Manual zu fgetcsv() sagt, dass der Parameter $escape erst mit 5.3.0 hinzukam. fputcsv() erwähnt/kennt ihn gleich gar nicht. Wenn fputcsv() allerdings schon seit 5.1.0 existiert und doppelte Hochkommas erzeugt, dann sollte man annehmen, dass auch fgetcsv() und str_getcsv() (ab 5.3.0 erhältlich) damit umgehen können. (fputcsv() hatte ich mir zu den vorherigen Antworten nicht angeschaut.) Zudem wäre es auch nur einen Kleinigkeit, es einzubauen und irgendwer hätte sich sicher schon darüber beschwert, wenn es nicht ginge. Wer weiß, was wirklich ist, möglicherweise kocht ja auch der PMA sein eigenes Süppchen.

                  Lo!

                  1. Hello,

                    Aber mal unabhängig von Wortspielen würde mich interessieren, um welche PHP-Version es sich handelt und welches Format das dazugehörige fputcsv() dann erzeugt.
                    http://de2.php.net/manual/de/function.fputcsv.php
                    dort steht nämlich auch die Verdoppelung beschrieben.

                    Ich kenne die Historie nicht und kann (weil ich nciht nachforschen will) nur mutmaßen, dass es so sein könnte, weswegen ich den Konjunktiv in meinen Antworten verwendete.

                    Ich habe viel mit fgetcsv() gearbeitet, anfangs ein eigenes fputcsv() gehabt und später auch das fertige benutzt. der einzige gravierende Fehler war immer der mit der (Nicht-)erkennung der leeren Zeilen. In der Beschreibung stand es aber schon immer sinnvoll. (Array mit einem NULL-Element). Das wurde aber auf mein Drängeln hin repariert...

                    Wenn jetzt also wieder ein Fehler in der Funktion sein sollte, sollten wir eine Bug-Meldung schreiben. Aber vielleicht sehen die Anführungszeichen in der Datei ja auch nur so aus, wie Anführungszeichen?

                    Strings sollten nach den CSV-Gepflogenheiten immer in Anführungszeichen eingeschlossen werden (Im Gegensatz zu Zahlen). Dann dürfen sie auch Zeilenumbrüche enthalten, was hier auch noch zu testen wäre...

                    Das Manual zu fgetcsv() sagt, dass der Parameter $escape erst mit 5.3.0 hinzukam.

                    Wer den erfunden hat, weiß ich nicht und schon gar nicht, wozu überhaupt? (oder umgekehrt).

                    fputcsv() erwähnt/kennt ihn gleich gar nicht. Wenn fputcsv() allerdings schon seit 5.1.0 existiert und doppelte Hochkommas erzeugt, dann sollte man annehmen, dass auch fgetcsv() und str_getcsv() (ab 5.3.0 erhältlich) damit umgehen können. (fputcsv() hatte ich mir zu den vorherigen Antworten nicht angeschaut.) Zudem wäre es auch nur einen Kleinigkeit, es einzubauen und irgendwer hätte sich sicher schon darüber beschwert, wenn es nicht ginge. Wer weiß, was wirklich ist, möglicherweise kocht ja auch der PMA sein eigenes Süppchen.

                    Das wäre durchaus plausibel. Da müsste mal jemand in den Quellcode schauen, der ihn zur Hand hat. Ich bin unterwegs und habe das ganze Zeug nicht dabei...

                    Liebe Grüße aus Braunschweig

                    Tom vom Berg

                    --
                     ☻_
                    /▌
                    / \ Nur selber lernen macht schlau
                    http://bergpost.annerschbarrich.de