Ankündigung

Einklappen
Keine Ankündigung bisher.

String in mehrere kleine Teile zerlegen

Einklappen

Neue Werbung 2019

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

  • String in mehrere kleine Teile zerlegen

    Hi,

    lese mit fopen eine Datei aus, die pro Zeile mehrer hundert Zeichen hat.

    Nun habe ich eine Liste, die mir sagt wo verschiedene Datensätze beginnen und enden:

    Bsp: Artikelnr (von Zeichen 10 bis 20), Usernummer (von Zeichen 25 bis 30), usw, usw.

    Ich habe mir überlegt, ein Array anzulegen, in das ich gespeichert habe an welchen Stellen er umbrechen soll.

    So lese ich jede Zeile Zeichenweise ein (was aber suuuper lange dauert, weil die Datei ca. 30000 Zeilen hat mit mehren hundert zeichen pro Zeile).

    Code:
    $daten = array('8', '20', '48', '58', '67', '93','107','119','129','141','146','158','161','170','173','182','194','197','207');
    $ende = 18;
    
    for ($counter = 0; !feof($handle); $counter++){
      $buffer = fgetc($handle);
      
        if ($array_counter == $ende){ //Wenn das Array im letzten Element ist
           $array_counter = 0; $counter = 0; //Fange von vorne an
        
        }else if ($counter >= $daten[$array_counter]  && $counter < $daten[$array_counter]) echo $buffer;
         else if ($daten[$array_counter] == $counter){ // Wenn Counter gleich der 
                   $array_counter++; echo ("\n"); //Stelle ist erhöhe array_counter
                    }
    }
    fclose ($handle);
    Mein Code ist sehr ineffizient und daher dachte ich mir, dass ich die Datei Zeilenweise einlese. Mein Problem ist, wie kann ich den String dann teilen, oder gibt es eine bessere Lösung?

    Gruss
    unknown

  • #2
    1. Frage : Woher bekommst du deine Datei ????
    2. Frage : Warum ist diese nicht ordentlich mit Trennern versehen .. ??

    3. Frage :

    PHP-Code:
    <?php
    if ($counter >= $daten[$array_counter]  && $counter $daten[$array_counter]) 
    $string '$string$buffer'// wird nicht geparsed !! Absicht ?
    ?>
    Hinweis:
    Bitte mit einfügen und ausgegebene Fehler mit korrigieren ..
    PHP-Code:
    <?php
    error_reporting
    (E_ALL);
    ?>

    Kommentar


    • #3
      Moin

      die Daten liegen auf dem Server (werden bereitgestellt)

      und nein es gibt keine vernünftigen Trennzeichen (sonst wäre das alles wesentlich einfacher

      und zu 3) jupp war Absicht

      zu 4) Es geht mir eigentlich nur um den Algorithmus (der Code läuft so natürlich nicht), aber ich schätze man versteht, was da passiert

      Gruss
      unknown

      Kommentar


      • #4
        Wenn das Absicht ist versteh ich deinen Code nicht weil dann brauchst du $buffer überhaupt nicht ???!!

        Wo leist du da überhaupt was ein !?

        du willst ne Zeile einlesen und dann für jedes Array Element was machen ..

        klingt nach http://de2.php.net/manual/de/control...es.foreach.php

        Kommentar


        • #5
          Moin,

          hatte den Code mal zum Testen von einem C Programm in PHP gewurschtelt, um zu sehen wie schnell er die Daten durchgeht.

          In Pseudo Code soll er folgendes machen:

          Lese jede Zeile ein und Teile sie an bestimmten Stellen in Strings.
          Mache dies bis EOF

          Frage wäre ob es eine Fkt gibt, die einen String an bestimmten Stellen teilt, oder ob es eine andere Möglichkeit gäbe

          Gruss
          unknown

          Kommentar


          • #6
            also mit file() kannst du dir deine datei in ein ARRAY einlesen lassen.

            Dannach kannst du dieses Array durchgehen .. $array[0] = erste zeile , $array[1] = zweite Zeile etc.

            dannach musst du dann vllt mittels array_walk() dein "Datei Array" durchlaufen und denn musst du dort meinetwegen das foreach() einbauen ..

            ist geschmackssache ...

            du kannst mittels explode() einen String "teilen" aber problem ist dir fehlt der Seperator !!

            Kommentar


            • #7
              Moin,

              alles klar. Habe die Datei als Array eingelesen.

              Das foreach durchläuft doch nun das gesamt Index. Die Frage beleibt jedoch, wie ich an bestimmten Stellen ein Array/string erzeugen kann:

              Bsp:
              $lines = file ('test.txt');

              $lines[0] wäre somit die erste Zeile. Wie teile ich nun den Inhalt der Zeile von Zeichen 7 bis 10 in den String xy von 15 bis.....

              Danke für die Hilfe

              Gruss
              unknown

              Kommentar


              • #8
                Zitat von M3g4Star
                du kannst mittels explode() einen String "teilen" aber problem ist dir fehlt der Seperator !!
                Wenn ich das richtig verstanden habe ist aber angegeben, an welcher Stelle geteilt werden soll, also einfach die datei wie M3g4Star geschrieben hat in ein Array einlesen und dann mit $wert1zeile1 = substr($array[0], 0, 10) die einzelnen werte auslesen. Zu Lösen z.B. mit einem foreach.

                Kommentar


                • #9
                  Moin,

                  hammer genau das habe ich gesucht

                  Many thx.

                  Gruss
                  unknown

                  Kommentar


                  • #10
                    Na siehste so schwer war's nich

                    Kommentar

                    Lädt...
                    X