TXT-File aufbröseln

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

  • TXT-File aufbröseln

    Hallo,

    wer weiß, wie man aus der folgenden TXT-Datei ...

    07992620000119628978016899909DE000119628500002000000,000978EURMS40048000000
    07992620000136848000017752499XS017752499701500000000,000830JPYMS20069999000


    ... eine CSV-Datei zum Einlesen oder ein Array in folgender Form erstellen kann:

    0799262;000;0119628;978;016899909;DE0001196285;00002000000,000;978;EUR;MS4;0048000;000
    0799262;000;0136848;000;017752499;XS0177524997;01500000000,000;830;JPY;MS2;0069999;000

    Wäre dankbar für ein Code-Beispiel.

  • #2
    schau dir mal substr() an
    Kissolino.com

    Kommentar


    • #3
      Natürlich mit der Funktion:

      PHP-Code:
      feenstaub($foo); 
      Wobei in $foo dein Text sein muss!

      ...

      Natürlich nicht! Deine Fragestellung darf ruhig etwas ausführlicher sein. Zum umwandeln muss man ja das Muster kennen.

      Ich weiß es nicht mit Sicherheit, aber ich meine, dass das Muster deiner Datei in den Längen der Zeichenketten liegt. Der erste Teil ist 7 Zeichen lang, dann kommt ein Semikolon, dann drei Zeichen, dann wieder ein Semikolon und so weiter. Von daher nehme ich an, dass diese zeichenzahl das Muster darstellt.

      In diesem Falle schau dir die Funktion substr(); an.

      Kommentar


      • #4
        Original geschrieben von Happy Nihilist
        Natürlich mit der Funktion:

        PHP-Code:
        feenstaub($foo); 
        Wobei in $foo dein Text sein muss!
        PHP-Code:
        function feenstaub($foo)
        {
            
        $durchlauf = array(7,3,7,3,9,12,15,3,3,3,7,3);
            
        $ausgabe= array();

            
        $k=0;
            for (
        $i=0$i<count($durchlauf); $i++)
            {
              
        $startwert $i==?  $i $durchlauf[$i-1]+$k;
              
        $ausgabe[] = substr($foo,$startwert,$durchlauf[$i]);
              
        $k=$k+$durchlauf[$i-1];
            }
            return 
        implode(";",$ausgabe);
        }
        echo 
        feenstaub("07992620000119628978016899909DE000119628500002000000,000978EURMS40048000000"); 
        ... da ich gerade langeweile hatte
        Kissolino.com

        Kommentar


        • #5
          Merci,

          ich werd 's mal testen !

          Kommentar


          • #6
            @Wurzel: *rofl*

            Kommentar


            • #7
              @Wurzel: OK, dein Code läuft soweit !

              @alle: Habe jetzt folgenden Code gemacht:

              PHP-Code:
              // Quelldatei festlegen (CSV/TXT)
              $CSV "test.txt";

              // Quelldatei öffnen
              $fp fopen("$CSV""r");

              // Größe der Quelldatei bestimmen
              $fp_size filesize("$CSV");

              // Inhalt einlesen
              $fp_content fread($fp,$fp_size);

              echo 
              "$fp_content"
              Weiß jetzt nicht so recht weiter ! Wie kann ich jetzt "$fp_content" gemäß dem Code von Wurzel bearbeiten, damit ich dann ein Array in meine DB schreiben kann ???

              Kommentar


              • #8
                PHP-Code:
                $CSV file("test.txt");
                foreach(
                $CSV as $foo)
                {
                  echo 
                feenstaub($foo);

                ^^ so, wenn die datei so aufgebaut ist:

                07992620000119628978016899909DE000119628500002000000,000978EURMS40048000000
                07992620000136848000017752499XS017752499701500000000,000830JPYMS20069999000
                07992620000119628978016899909DE000119628500002000000,000978EURMS40048000000
                07992620000136848000017752499XS017752499701500000000,000830JPYMS20069999000
                Kissolino.com

                Kommentar


                • #9
                  OK, aber ich will ja Nichts "echoen" !
                  Wie sprech' ich das Array für mein "insert-statement" an ?

                  Kommentar


                  • #10
                    - kommentier in der funktion mal
                    PHP-Code:
                    return implode(";",$ausgabe); 
                    - in $ausgabe[0] - $ausgabe[x] stehen die werte
                    - mysql_query("insert into tabelle values("".$ausgabe[0]."", ...)"); einfügen
                    - mit ner testzeile laufen lassen

                    - die echos kannst du dann weglassen oder einen kontrollwert auf der funtion zurückgeben lassen und ausgeben
                    Kissolino.com

                    Kommentar


                    • #11
                      OK, kapiert !

                      Aber, ich glaub', bei der query muß man irgendwas mit 'ner Schleife machen, da die TXT-Datei ca. 20.000 Zeilen enthält ?

                      Kommentar


                      • #12
                        äh, ja!

                        nimm statt der foreach eine for-schleife und teste mal mit 50er, 100er schritten, danach sendest du einen header("Location ...") und übergibst die letzte durchlauf-nummer als neuen startwert für den nächsten durchlauf.

                        es darf aber KEINE ausgabe per echo erfolgen, sonst meckert der header.
                        Kissolino.com

                        Kommentar


                        • #13
                          Vorerst mal Danke für deine Hilfe !

                          Ich muß das Ganze jetzt mal austesten !

                          Kommentar


                          • #14
                            Hab 's jetzt mal folgendermaßen gemacht:

                            PHP-Code:
                            // Quelldatei festlegen (CSV/TXT)
                            $CSV "test.txt";

                            $openit file($CSV);
                            $counter count($openit);
                            $filearray file("$CSV");

                            for(
                            $t=0$t<$counter$t++)
                            {
                               
                            $durchlauf = array(7,3,7,3,9,12,15,3,3,3,7,3);

                               
                            $k=0;
                               for (
                            $i=0$i<count($durchlauf); $i++)
                               {
                                  
                            $startwert $i==?  $i $durchlauf[$i-1]+$k;
                                  
                            $item[] = substr($filearray[$t],$startwert,$durchlauf[$i]);
                                  
                            $k=$k+$durchlauf[$i-1];
                               }

                            echo 
                            "$item[2]/";

                            Aber irgendwas stimmt nicht ! Ich bekomme immer nur den ersten Datensatz ???

                            Kommentar


                            • #15
                              mach mal bitte
                              PHP-Code:
                              $CSV "test.txt";

                              $openit file($CSV);
                              echo 
                              "<pre>";
                              print_r($openit);
                              echo 
                              "<pre>";
                              exit; 
                              werden die datensätze so angezeigt, wie erwartet?

                              ps: nimm nicht gleich alle 20.000
                              Kissolino.com

                              Kommentar

                              Lädt...
                              X