verflixte CSV

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • verflixte CSV

    erst einmal...Guten Morgen !

    da will ich mich grad ganz frisch dransetzen für einen freund nen script zu erstellen, dass ihm seinen daten aus einer CSV Datei in MySQL überträgt, was ich ja nun bereits schon enige mal realisiert habe, aber dieser fall ist ein wenig anders... zumindest so, dass ich nicht weiß, wie ich das umsetzen kann und hoffe dass mir jemand von euch den richtigen tip geben kann !?

    Diese CSV Datei beginnt wie die meisten...in der ersten Zeile stehen die Feldnamen und ab da an die Daten.. wie gewöhnlich...
    dann jedoch, nach einer nicht festen anzahl von Zeilen, wiederholt sich die Feldnamen-zeile und genau das ist mein Problem, auf welchem Weg kann ich solch eine Feldnamen-Zeile ermitteln und überspringen bzw auslassen?

    für tips oder kniffe wäre ich dankbar!
    gruss
    ways
    Coder never die, they just GOSUB without RETURN

    Mein System

  • #2
    Jemand mit halbwegs PHP Kenntnissen, würde da evtl ein Script drüber scheuchen.
    Wir werden alle sterben

    Kommentar


    • #3
      Mittels file_get_contents einlesen.. array_unique drüber bügeln.. file_put_contents zurück. Fertig.
      gruss Chris

      [color=blue]Derjenige, der sagt: "Es geht nicht", soll den nicht stoeren, der's gerade tut."[/color]

      Kommentar


      • #4
        Zitat von combie Beitrag anzeigen
        Jemand mit halbwegs PHP Kenntnissen, würde da evtl ein Script drüber scheuchen.
        Tja, wären die Feldnamen immer gleich oder gleicher anzahl hätte ich das sicher auch mit meinen bisherigen kenntnissen geschafft.

        Vielen dank für die freundliche Unterstützung. Manchmal ist weniger mehr !
        Coder never die, they just GOSUB without RETURN

        Mein System

        Kommentar


        • #5
          Tja, wären die Feldnamen immer gleich oder gleicher anzahl hätte ich das sicher auch mit meinen bisherigen kenntnissen geschafft.
          1. Woher soll ich die Struktur deiner Daten kennen?
          2. Unterschiedliche Feldnamen in einer CSV Datei? Das geht nicht.
          Wir werden alle sterben

          Kommentar


          • #6
            1. Das stimmt, ich kann die leider auch nicht darstellen ohne von euch erschlagen zu werden, der grund dafür ist die Menge... nicht die Daten selbst.


            2. Ein wenig rätselhaft von mir formuliert, das kann gut sein...

            es ist so: diese CSV Datei enthält max 260 feldnamen.. diese Feldnamen haben auch eine feste Bezeichnung., jedoch werden immer nur die feldnamen in der CSV angelegt, die auch Daten enthalten. Die Anzahl der Feldnamen kann also variieren. Die DB-Tabelle hat natürlich alle 260 Feldnamen drin, nun muss ich es schaffen, anhand der CSV-Datei die aktuell verwendeten Feldnamen zu ermitteln und die werte darin in die Datenbank zu schreiben. Für mich ein wenig kniffelig...aber interessant.

            wer interesse hat, dem schick ich solch eine massive CSV auch gern per email zu.
            Coder never die, they just GOSUB without RETURN

            Mein System

            Kommentar


            • #7
              Das ist also das mir bekannte Problem das in einer CSV Datei praktisch mehrere enthalten sind, in denen die Felder und Feldanzahl wechseln.

              Nur lösbar, wenn die Feldbezeichnungen irgendwelche erkennbaren Unterscheidungsmerkmale zu den Daten haben.

              Die Anzahl der Felder könnte man zur Detektion nehmen, wenn nicht zufällig eine Folge käme, die gleich der Anzahl vorherigen Folge entsprechen würde.

              Also bleibt die Frage zu klären ob es einen oder sogar mehrere Unterscheidungsmöglichkeiten gibt oder nicht.
              Wenn ja kann man darauf ansetzen.

              Kommentar


              • #8
                Habe da gerade mal einen alten Fall aus der Kiste geholt, da war es so ähnlich (typisch für den Export von Daten mancher Firmen für Händler).

                Da hatte man aber zur Differenzierung 2 leere Zeilenvorschübe gemacht.

                Kommentar


                • #9
                  also die Anzahl der Feldnamen bleibt solange gleich, bis ich zusätzliche Feldnamen anfordere ( messewerte ), das hab ich grad klären können..., ansonsten hab ich gar keinen einfluss auf das generieren der CSV. Das wiederholen der Feldnamen innerhalb der CSV bleibt einem Muster treu... also das wechselt nicht, demnach kann ich wohl alle Feldnamen als ganzen String verwenden um diesen dann aus der CSV zu löschen...bzw zu überspringen.

                  ich muss da jedenfalls ne kluge lösung bringen, da die CSV ca 10MB hat...
                  ungefähr ( 1350 zeilen a 260 Spalten, davon sind 255 Spalten reine INTs)
                  das einlesen passiert auch noch alle 6 std...

                  hier wäre ein Hinweis der MySQL Profis gewünscht, bis zur welchen größe die Geschwindigkeit nicht leidet? Zum Abruf der daten wird eigentlich auch nur der aktuellste Datenpaket benötigt, max die letzen beiden. Also 2700 Zeilen a 260 Felder... die INTs haben eigentlich nicht mehr als 4 Zeichen (unsigned)

                  ich hab ja schon was ähnliches gemacht... aber da waren es nie soviele Daten....hab daher auch leider keine Erfahrung
                  Coder never die, they just GOSUB without RETURN

                  Mein System

                  Kommentar


                  • #10
                    Code:
                    [COLOR=#993333][B]LOAD[/B][/COLOR] [COLOR=#993333][B]DATA[/B][/COLOR] [COLOR=#993333][B]LOCAL[/B][/COLOR]
                            [COLOR=#993333][B]INFILE[/B][/COLOR] [COLOR=#ff0000]'/var/www/blaaa.csv'[/COLOR]
                            [COLOR=#993333][B]REPLACE[/B][/COLOR]
                            [COLOR=#993333][B]INTO[/B][/COLOR] [COLOR=#993333][B]TABLE[/B][/COLOR] tabellenname
                            [COLOR=#993333][B]FIELDS[/B][/COLOR]
                                    TERMINATED [COLOR=#993333][B]BY[/B][/COLOR] [COLOR=#ff0000]';'[/COLOR]
                                    [COLOR=#993333][B]OPTIONALLY[/B][/COLOR] [COLOR=#993333][B]ENCLOSED[/B][/COLOR] [COLOR=#993333][B]BY[/B][/COLOR] [COLOR=#ff0000]'"'[/COLOR];
                    Damit kannst du auch einige zig tausend mehr ratz fatz einspielen.
                    Den SQL Code musst du natürlich deinen Gegebenheiten anpassen.
                    Zuletzt geändert von ; 04.08.2009, 23:22.

                    Kommentar


                    • #11
                      ich glaube mit dem LOAD DATA kenn ich mich zuwenig aus,
                      ich erhalte da zwar einträge, aber keinen der mir nen weg aufzeigt

                      ich probiers weiter
                      Coder never die, they just GOSUB without RETURN

                      Mein System

                      Kommentar


                      • #12
                        Zitat von ways Beitrag anzeigen
                        aber keinen der mir nen weg aufzeigt
                        Da verstehe ich nicht was gemeint ist.
                        Wenn du Datensätze erhältst was entspricht dann nicht deinen Anforderungen ?

                        Die Methode ist eigentlich auch nicht anders als das zeilenweise auslesen einer Datei mittels fgetcsv .

                        Aber es umgeht Zeitprobleme, die man wahrscheinlich hätte wenn man es mit fgetcsv machen würde.

                        Kommentar


                        • #13
                          also ich schaffe es schon die CSV 1 zu1 so in mysql einzufügen..
                          aber ich hab bei meinem provider keinen zugriff auf data verzeichnis meines mysqls

                          und wie ich die feldnameneintröge so filtere is mir auch noch nicht ganz klar
                          Coder never die, they just GOSUB without RETURN

                          Mein System

                          Kommentar

                          Lädt...
                          X