wechselnde spaltenposition in csv

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

  • wechselnde spaltenposition in csv

    Hi Leute,

    ich hab da ein problem mit dem korrekten einlesen von csv daten.
    Vorher war alles einfach, da hab ich einfach alle spalten ausgelesen
    und per insert in mysql gebracht, nun hab ich aber das problem, dass die CSV datei sich künftig ständig ändert und die spaltenanzahl variiert und somit auch die position der spalten, die ich benötige.
    Nur der Name der Spalte ändert sich nicht.

    Das hier:
    PHP-Code:
    while ( ($data fgetcsv($handle10000";")) !== FALSE 

    $var $data[0].$data[7].$data[12]; 
    // ... 
    // ... SQL INSERT

    funktioniert nun nicht mehr, wie kann ich das anpacken und nach Spaltennamen auslesen??
    Für Hinweise und Ansätze wäreich dankbar !
    Coder never die, they just GOSUB without RETURN

    Mein System

  • #2
    z.B.: Zeilenweise einlesen, mit explode in array umwandeln und per isset o.ä. prüfen, bevor du die Daten in SQL-Query setzst.

    Kommentar


    • #3
      PHP-Code:
      <?php

      $csv 
      file($datei);
      $hack explode(";"$csv[0]);
      $spalten = array();

      for(
      $i=0$i<count($hack); $i++)
          
      $spalten[$hack[$i]] = $i;

      for(
      $i=1$i<count($csv); $i++)
      {
          
      $hack explode(";"$csv[$i]);

          foreach(
      $spalten as $spalte => $int)
          {
              
      $werte[] = "`".$spalte."` = '".mysql_escape_string($hack[$int])."'";
          }

          
      mysql_query("insert into tabelle set ".implode(", "$query));
      }

      ?>
      Böse aber funktioniert
      h.a.n.d.
      Schmalle

      http://impressed.by
      http://blog.schmalenberger.it



      Wichtige Anmerkung: Ich habe keine Probleme mit Alkohol ...
      ... nur ohne :-)

      Kommentar


      • #4
        okay, also zeilenweise einlesen kann ich ja per:

        PHP-Code:
        $handle fopen (CSV_TMP_PATH."$csv_file","r");
        while ( (
        $data fgetcsv($handle10000";")) !== FALSE )
        {    
                
        $num  count ($data);       

                 for (
        $x=0$x $num$x++)  // Eine Zeile
                
        {
                  
        // ??? z.b Spalte 'leadtime'
                
        }

        da platzt mir ja doch kopf
        Coder never die, they just GOSUB without RETURN

        Mein System

        Kommentar


        • #5
          Original geschrieben von schmalle
          Böse aber funktioniert

          damit kann ich doch keine csv spalten-namen direkt anspechen undweiterverarbeiten oder liegt mir schon zuviele tränen auf den augen ?
          Coder never die, they just GOSUB without RETURN

          Mein System

          Kommentar


          • #6
            Original geschrieben von ways
            damit kann ich doch keine csv spalten-namen direkt anspechen undweiterverarbeiten oder liegt mir schon zuviele tränen auf den augen ?
            Das Beispiel geht davon aus, dass die Spaltennamen in der ersten Zeile stehen
            h.a.n.d.
            Schmalle

            http://impressed.by
            http://blog.schmalenberger.it



            Wichtige Anmerkung: Ich habe keine Probleme mit Alkohol ...
            ... nur ohne :-)

            Kommentar


            • #7
              achso... klar... das stimmt so schon, die spaltennamen liegen in der ersten zeile...

              aber ich kann ja nicht alle spaltennamen einsetzen, da mir neue eventuell ja in der mysql-tabelle fehlen.

              aber ich kann mit deinem Bsp jedenfalls die bisher benötigten Spalte ermitteln und dann NUR diese eintragen...

              damit bin ich ja schon ein schritt weiter...

              sonst müßte ich die tabelle um die neuen spalten ja auch jedesmal erweitern, was ja schon echt an nen horror grenzt !
              Coder never die, they just GOSUB without RETURN

              Mein System

              Kommentar


              • #8
                naja, nicht wenn du vorher definierst, welche spaltennamen du tatsächlich auslesen willst.

                in schmalles beispiel hast du ja im array hack die überschriften.

                mit deinem array der gültigen spalten namen schlurfst du durch das hack array und merkst dir die positionen

                und nur die werte die du dann bekommst schiesst du in die db

                Kommentar


                • #9
                  ja, den ansatz verfolge ich bereits

                  der einzige weg, der mir moment schlüssig ist.

                  auf jedenfall schon mal ein GROßES dankeschön !
                  Coder never die, they just GOSUB without RETURN

                  Mein System

                  Kommentar

                  Lädt...
                  X