| PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Post your PHP questions here! |
 |

18-11-2009, 20:00
|
|
Bart
Registrierter Benutzer
|
|
Registriert seit: Jul 2005
Beiträge: 69
|
|
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.
Zitat:
[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
|

18-11-2009, 20:07
|
TobiaZ
 Moderator
|
|
Registriert seit: Jan 2001
Ort: MUC und MGL, Germany
Beiträge: 34.188
|
|
Mal ins Manual geguckt?
parse_ini_file
Es gibt doch für fast alles schon fertige lösungen.
|

18-11-2009, 20:08
|
Kropff
  Administrator
|
|
Registriert seit: Mar 2002
Ort: Köln
Beiträge: 11.310
|
|
Wenn die Struktur sauber ist, parse_ini_file.
Peter
__________________
Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
Meine Seite
|

18-11-2009, 20:16
|
 |
onemorenerd
 Moderator
|
|
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.481
|
|
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.
|

18-11-2009, 20:25
|
Kropff
  Administrator
|
|
Registriert seit: Mar 2002
Ort: Köln
Beiträge: 11.310
|
|
Zitat:
Zitat von onemorenerd
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
|

18-11-2009, 20:32
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
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
|

18-11-2009, 20:36
|
|
Bart
Registrierter Benutzer
|
|
Registriert seit: Jul 2005
Beiträge: 69
|
|
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.
|

18-11-2009, 20:37
|
wahsaga
 Moderator
|
|
Registriert seit: Sep 2001
Beiträge: 24.486
|
|
Zitat:
Zitat von Bart
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.
Zitat:
|
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.
|

18-11-2009, 21:26
|
|
Bart
Registrierter Benutzer
|
|
Registriert seit: Jul 2005
Beiträge: 69
|
|
@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
|

18-11-2009, 21:57
|
Kropff
  Administrator
|
|
Registriert seit: Mar 2002
Ort: Köln
Beiträge: 11.310
|
|
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
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
|
PHP News
|