txt datei selectiert auslesen.

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

  • txt datei selectiert auslesen.

    Möchte aus einer Textdatei bestimmte Daten auslesen.


    Erst einmal ein Auszug der Textdatei (orginal wesentlich länger)
    Ein Umbau auf Mysql ist leider nicht möglich da das Spiel diese Datei so anlegt.


    [Session]
    Scene=2009 FORMULA 1 FUJI TELEVISION JAPANESE GRAND PRIX
    TrackLength=5834.1304
    StartTime=2009-11-17 23:38:42
    SessionTime=3544.006104
    LengthLaps=-1
    LengthTime=165
    DarkCloud=0.00
    Raining=0.00
    AmbientTemp=25.9
    TrackTemp=31.0
    OnPathWetness=0.00
    OffPathWetness=0.00
    Wind=(0.0,0.0,0.0)
    Session=Practice116:12:17
    GamePhase=GreenFlag
    YellowFlag=None
    SectorYellowFlags=(0,0,0)

    [Slot000]
    Driver=Ryan Atwood
    Vehicle=1. Felipe Massa
    VehicleClass=Season 2009
    Position=1
    Laps=26
    InSector=1
    BestLap=84.363
    LastLap=84.240
    BestSectors=(27.942, 39.033, 16.228)
    LastLapSectors=(28.156, 39.856, 16.228)
    Sectors=(-1.000, -1.000, -1.000)
    Pitstops=4
    InPits=1
    TimeGapToLider=0.000
    LapGapToLider=0
    TimeGapToPrev=0.000
    LapGapToPrev=0
    LapDistanceTravelled=214.034
    FinishStatus=None
    Lap=(1, 88.181, 30.340, 41.090, 16.752)
    Lap=(4, 88.703, 30.594, 41.187, 16.921)
    Lap=(5, 88.193, 30.123, 41.122, 16.948)
    Lap=(6, 85.100, 28.402, 39.963, 16.736)
    Lap=(7, 87.852, 29.910, 41.081, 16.862)16:12:15
    Lap=(9, 84.298, 27.942, 39.908, 16.448)
    Lap=(12, 84.450, 28.648, 39.033, 16.770)
    Lap=(13, 84.240, 28.156, 39.856, 16.228)


    [Slot001]
    Driver=Karl Larson
    Vehicle=1. Nakasumi Takasumi
    VehicleClass=Season 2009
    Position=1
    Laps=26
    InSector=1
    BestLap=84.363
    LastLap=84.240
    BestSectors=(27.942, 39.033, 16.228)
    LastLapSectors=(28.156, 39.856, 16.228)
    Sectors=(-1.000, -1.000, -1.000)
    Pitstops=4
    InPits=1
    TimeGapToLider=0.000
    LapGapToLider=0
    TimeGapToPrev=0.000
    LapGapToPrev=0
    LapDistanceTravelled=214.034
    FinishStatus=None
    Lap=(1, 88.181, 30.340, 41.090, 16.752)
    Lap=(4, 88.703, 30.594, 41.187, 16.921)
    Lap=(5, 88.193, 30.123, 41.122, 16.948)
    Lap=(6, 85.100, 28.402, 39.963, 16.736)
    Lap=(7, 87.852, 29.910, 41.081, 16.862)16:12:15
    Lap=(9, 84.298, 27.942, 39.908, 16.448)
    Lap=(12, 84.450, 28.648, 39.033, 16.770)
    Lap=(13, 84.240, 28.156, 39.856, 16.228)
    So nun brauch ich Daten immer erst ab [Slot000], [Slot001] .... [Slot030]

    Also z.b aus [Slot000]
    Driver, Position, Laps, BestLap
    Also kann es sein das beim Auslesen auch mal Zeilen übersrpungen werden.
    danach soll ein Zeilenumbruch eingeleitet werden und die Daten für [Slot002] ausgegeben werden und das so weiter bis [Slot030]

    Mein letzter kläglicher Versuch war mit hilfe der Forumssuche aber brachte auch nicht das gewünschte ergebnis.

    PHP-Code:
    function parse_ini($filename$process_sections false)
    {
      function 
    replace_process(& $item$key$consts)
      {
        
    $item str_replace(array_keys($consts), array_values($consts), $item);
      }

      
    $buf get_defined_constants(true); // PHP version > 5.0
      
    $consts $buf['user'];
      
    $ini parse_ini_file($filename$process_sections);

      
    array_walk_recursive($ini'replace_process'$consts);
      return 
    $ini;
    }

    define("[Slot001]"'/test');
    print_r(parse_ini(dirname(__FILE__).'/test.txt')); 
    Also bisher scheitert es schon daran überhaut nur 1 Datensatz selectiert auszulesen.

    Auch gefällt mir die Ausgabe mit print_r nicht da dort immer der Arrayname mit ausgegeben wird.

    Ich hoffe das ich mir hier überhaupt was machbares aufgebrummt habe.

    Vielen Dank im Vorraus: Bart

  • #2
    Mal ins Manual geguckt?

    parse_ini_file

    Es gibt doch für fast alles schon fertige lösungen.

    Kommentar


    • #3
      Wenn die Struktur sauber ist, parse_ini_file.

      Peter
      Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
      Meine Seite

      Kommentar


      • #4
        Vermutlich kommt parse_ini_file() mit den mehrfachen Laps nicht klar. Da bleibt wahrscheinlich nur der letzte Eintrag übrig. Außerdem haben Klammern laut Manual eine besondere Bedeutung, ich weiß nur grad nicht welche.

        Kommentar


        • #5
          Zitat von onemorenerd Beitrag anzeigen
          Vermutlich kommt parse_ini_file() mit den mehrfachen Laps nicht klar. Da bleibt wahrscheinlich nur der letzte Eintrag übrig.
          Nein, wird sauber erfasst. Zumindest auf meinem System.

          Peter
          Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
          Meine Seite

          Kommentar


          • #6
            Hallo,

            ich hatte mal eine objektorientierte INI Reader Bibliothek geschrieben, die zwar flexibler ist als parse_ini_file, aber in deinem Falle jeweils nur einen (den letzten) Eintrag für Lap benutzt. Falls ich dir das noch anpassen und zur Verfügung stellen soll (nicht kostenlos), bitte per PM melden.

            Gruß,

            Amica
            [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
            Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
            Super, danke!
            [/COLOR]

            Kommentar


            • #7
              Hmm, müsste ich mich nocheinmal mit beschäftigen, den Hinweis auf den link mit parse_ini_file. kenne ich zwar schon aber irgendwie hilft mir das auch noch nicht richtig weiter

              Aber bevor ich weiter nach Anwendungsbeispiele suche ist meine Frage ob die ausgabe dann auch Formatiert erfolgen kann ohne die Arrays.
              Auch brauch ich ja nur die werte nach dem "=" (vergessen vorher anzugeben sorry)

              Print_r sieht einfach unschön aus und ist doch sehr unübersichtlich.

              Kommentar


              • #8
                Zitat von Bart Beitrag anzeigen
                Aber bevor ich weiter nach Anwendungsbeispiele suche ist meine Frage ob die ausgabe dann auch Formatiert erfolgen kann ohne die Arrays.
                Natürlich - man kann Arrays durchlaufen, und einzelne Elemente gezielt ansprechen.

                Print_r sieht einfach unschön aus und ist doch sehr unübersichtlich.
                print_r ist ja auch eher für Debugausgaben gedacht.
                I don't believe in rebirth. Actually, I never did in my whole lives.

                Kommentar


                • #9
                  @AmicaNoctis danke , aber ich fürchte das die Preise wie bisher immer für so was kleines zu hoch sind (also in anbetracht das es ein kleines privates projekt ist)

                  Zudem würde ich es dann warscheinlich auch nicht verstehen, was dann änderrungen im nachhinein erschweren würden oder wieder extreme Kosten auf mich zukämen.

                  Was jetzt aber nicht heisen soll das es deine Arbeit nicht wert sein würde.

                  So zurück zum thema .... so wie ich das bisher verstanden haben wäre mein Freund nummer 1 "Define". Also um erst einmal überhaut bis [Slot000] zu kommen ... nur irgendwie kann ich da ändern was ich will ... in der Ausgabe ändert sich nichts.


                  PHP-Code:
                  define("[Slot001]"'/test'); 
                  Ist ja bereits vorhanden, und müsste mir ja eigentlich dann erst ab den Slot001 ausgeben, was aber nicht der fall ist.

                  um ein eventuelles Problem mit den [] auszuschließen (die ich sogar extra in "" geschrieben hatte" habe ich es testhalber auf.
                  PHP-Code:
                  define('Game=rFactor''/test'); 
                  erfolgslos geändert.

                  Ausgabe bleibt immer gleich.

                  bin ich jetzt eigentlich mit dem Define auf dem richtigen weg?

                  Und was die Arrays betrifft, durch die unterschiedlichen Fahrer später müsste das doch in ein zweidimensionales Array oder? *schweisstropfenaufstirnbild

                  Kommentar


                  • #10
                    Vergiss mal das Beispiel und konzentrier dich nur auf das Array. Also deine ini-Datei heißt zum Beispiel meins.ini. Sie könnte auch blubb.txt heißen, das ist egal. Du hast nun direkten Zugriff auf die einzelnen Elemente über ihren Index.
                    PHP-Code:
                    $ini_array parse_ini_file("meins.ini"TRUE);
                    print_r($ini_array['Slot001']);
                    echo 
                    $ini_array['Slot001']['LastLapSectors']; 
                    Wenn in einem Element mehrere Angaben vorhanden sind, so kannst du mit explode arbeiten.

                    Peter
                    Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
                    Meine Seite

                    Kommentar

                    Lädt...
                    X