Hallo!
Ich bin php-technisch gesehen noch relativer Anfänger, habe einige Seiten in Verbindung mit MySQL gebastelt, die auch funktionieren, aber für einige Sachen wie z.B. das parsen fehlt mir noch das Verständnis. Da ich unter den Tutorials bisher keine passende Lösung gefunden habe, versuche ich hier mal mein Glück.
Im Grunde genommen kommt dieser Thread + Lösung meinem Problem schon recht nah:
http://www.tutorials.de/forum/php/213645-daten-aus-einem-string-auslesen.html
Mit dieser Lösung wurden die einzelnen Zeilen schön in ein Array verpackt und konnten so ausgegeben werden.
Mein Problem ist, dass ich am Ende zwar alles schön reihenweise ausgeben kann, ich aber nicht zielgerichtet auf einen Wert verweisen kann.
In dem Skript stehen ein paar Zeilen, die mein Problem lösen könnten, würden sie funktionieren:
Leider funktioniert das nicht, zumindest bekomme ich keine Ausgabe. Ich möchte den Wert des zugehörigen Bezeichners in eine Variable packen, mit der ich weiter arbeiten kann.
Ich habe einige Array-Funktionen wie in_array ausprobiert, um die Werte zu finden, die ich benötige, aber alles leider ohne Erfolg.
Wär genial, wenn mir da wer helfen könnte.
lg, menfalk
Ich bin php-technisch gesehen noch relativer Anfänger, habe einige Seiten in Verbindung mit MySQL gebastelt, die auch funktionieren, aber für einige Sachen wie z.B. das parsen fehlt mir noch das Verständnis. Da ich unter den Tutorials bisher keine passende Lösung gefunden habe, versuche ich hier mal mein Glück.
Im Grunde genommen kommt dieser Thread + Lösung meinem Problem schon recht nah:
http://www.tutorials.de/forum/php/213645-daten-aus-einem-string-auslesen.html
PHP:
<pre>
<?
$test='Geologischer Sondierungsbericht von 11:167:14
Typ Steinklumpen
Objekt ---
Eisengehalt 90 %
vorkommen chem. Elemente 104 %
Eisdichte 36 %
Lebensbedingungen 33 %
Gravitation 0.72
Besonderheiten
Forschungmod. 100 %
Gebäudebau Kosten Mod. 1.00
Gebäudebau Dauer Mod. 1.00
Schiffbau Kosten Mod. 1.00
Schiffbau Dauer Mod. 1.00';
//mit dem regulärem wird der Text in einzelne Zeilen zerlegt
// \r: Carriage-Return \n: Line-break
// | steht für "oder"
// die einzelnen Zeilen landen in einem Array
$arr=preg_split("/\r\n|\r|\n/",$test);
//siehe Funktionsbeschreibung zu array_shift
$head=array_shift($arr);
//der reguläre Ausdruck sucht nach:
// beliebige Zeichenkette
// dann ein oder mehr Ziffern (\d), dann ein :
// usw. das $ bedeutet, dass der String dort zu Ende
// sein muss
preg_match("/.*?(\d+?:\d+?:\d+?)$/",$head,$von);
//Funktionsbeschreibung preg_match!
// $von war bis eben noch ein Array
$von=$von[1];
//Ein leeres Array erzeugen, in das die
// Daten später angefügt werden
$daten=array();
//Das array wird nun Zeilenweise durchgegangen
foreach($arr as $a) {
//temporäres Array, in dem 'bezeichner', 'wert'
// und 'einheit' stehen
// es wird unten an $daten angefügt
$temp=array();
//Der reg. Ausdruck muss am Anfang des
// Strings beginnen (^) und
// sucht nach:
// einer Zeichenkette, Leerzeichen (min. 1, wg. +),
// Ziffer oder . (min. 1)
// min. 1 Leerzeichen
// min. 1 weiteres Zeichen
// das Ende der Zeichenkette muss erreicht sein
preg_match("/^(.*)\ +?([\d\.]+)\ +?(.+)$/",$a,$vals);
//wenn er "getroffen" hat, sind alle drei
// Angaben vorhanden
if (count($vals)>1) {
$temp['bezeichner']=$vals[1];
$temp['wert']=$vals[2];
$temp['einheit']=$vals[3];
} else {
//ansonsten fehlt die Einheit
// Ausdruck ist wie oben, jedoch ohne die
// Einheit und statt den Ziffern oder Punkt
// darf auch ein beliebiges Zeichen dort stehen
preg_match("/^(.*)\ +?([\d\.]+|.+)$/",$a,$vals);
if (count($vals)>1) {
$temp['bezeichner']=$vals[1];
$temp['wert']=$vals[2];
$temp['einheit']="";
} else {
//wenn auch dieser Ausdruck nicht
// getroffen hat, wird der gesamte
// String als Bezichner übernommen
// (z.B. bei der Zeile "Besonderheiten")
$temp['bezeichner']=$a;
$temp['wert']="";
$temp['einheit']="";
}
}
//das temporäre Array wird an
// $daten angehängt
// Du könntest hier auch
// $daten[$temp['bezeichner']]=$temp;
// schreiben, dann könntest Du später
// über den Bezeichner auf die Arrayelemente
// zugreifen, z.B.:
// $Eisdichte=$daten['Eisdichte']['wert']
$daten[]=$temp;
}
//ab hier gibt es $von und $daten
// $von ist ein String
// $daten ist ein Array
// Du kannst z.B. mit foreach durch
// das Array laufen und so jeden
// Wert einzeln in die DB schreiben
echo "<b>".$von."</b>\n";
print_r($daten);
?>
</pre>
Mit dieser Lösung wurden die einzelnen Zeilen schön in ein Array verpackt und konnten so ausgegeben werden.
Mein Problem ist, dass ich am Ende zwar alles schön reihenweise ausgeben kann, ich aber nicht zielgerichtet auf einen Wert verweisen kann.
In dem Skript stehen ein paar Zeilen, die mein Problem lösen könnten, würden sie funktionieren:
PHP:
// Du könntest hier auch
// $daten[$temp['bezeichner']]=$temp;
// schreiben, dann könntest Du später
// über den Bezeichner auf die Arrayelemente
// zugreifen, z.B.:
// $Eisdichte=$daten['Eisdichte']['wert']
Leider funktioniert das nicht, zumindest bekomme ich keine Ausgabe. Ich möchte den Wert des zugehörigen Bezeichners in eine Variable packen, mit der ich weiter arbeiten kann.
Ich habe einige Array-Funktionen wie in_array ausprobiert, um die Werte zu finden, die ich benötige, aber alles leider ohne Erfolg.
Wär genial, wenn mir da wer helfen könnte.
lg, menfalk