# Bestimmte Teile eines Strings auslesen



## ShOrtYk (31. August 2007)

Hallo zusammen,

ich hab jetzt rumgegoogelt und bin zwischendurch auch mal in einem Thread hier gelandet, aber so wirklich weitergeholfen hat mir das alles nicht, da ich vor einem Problem stehe, das nirgendwo behandelt wurde.

Folgendes Problem:
Ich habe einen relativ langen Text, der über eine Textbox eingefügt wird.
Das ganze schicke ich dann per post-Methode über ein Formular an Seite Nummer 2, die den Text dann eigentlich bearbeiten soll. 

Und zwar benötige ich bestimmte Textteile, deren Anzahl und deren Position immer variieren. Es sind Zahlenwerte, die aber zum einen, wie gesagt, in unterschiedlicher Anzahl auftreten können, sodass ich mal 10, mal 13 und ein anderes mal 15 Werte auslesen muss und zudem kann die Zeichenanzahl der Zahlen variieren. Also bspw mal den Wert "200" und mal den Wert "20000" haben.

Grundsätzlich ist der Text immer identisch aufgebaut und beinhaltet vieles, was eigentlich überhaupt nicht benötigt wird.

Ich hatte mir überlegt, dass ich an eine bestimmte Stelle in den eingefügten Text springe und von dort aus solange den Abschnitt durchgehe, bis eine bestimmte andere Stelle im Text erreicht ist. Das funktioniert, da die Daten, die variieren und die ich benötige immer von Text umgeben ist, der immer konstant ist.

Mit Explode kann man, wenn ich es richtig verstanden habe, an bestimmten Stellen im Text einsetzen, indem man nach einem bestimmten Zeichen sucht. Problem ist, dass ich früher einsetzen muss, weil sich das Zeichen nach dem ich suchen könnte wiederholt. Es ist nicht möglich zu sagen ich setze an Punkt x ein und lese direkt danach die nächsten x Zeichen aus. Die Anzahl der Zeichen variiert :/
Ich müsste eine bestimmte Anzahl an Zeichen weitergehen bis ich die benötigten Werte erreiche, die aber eben nicht immer an den selben Stellen stehen 

Das Problem ist, dass ich nicht weiss, wie ich die Variation der Zeichenanzahl  und der Einträge handhaben soll. Ich finde fast überall nur Funktionen mit denen man zwar nach Zeichen suchen kann, die einem dann aber nur die Position zurückgeben o.ä., mit der ich ja nichts anfangen kann.

Mal ein Beispiel für den Text den es zu bearbeiten gilt:


> konstanter Text, immer gleich
> 
> Zeile 1, immer unterschiedliche Zeichenanzahl
> Zeile 2, ebenfalls mit der Möglichkeit untersch. Zeichenanzahl
> ...



zu Zeile 3: 
Zeile 3 ist im Prinzip so aufgebaut, dass 4 Zahlenwerte enthalten sind, die jeweils mit einem "," getrennt sind. Ich brauche den dritten Wert und alle anderen Werte können in ihren Zeichenanzahl variieren.

Ich hoffe mich hat jetzt überhaupt irgendjemand verstanden und ihr könnt mir weiterhelfen


----------



## Michael Engel (31. August 2007)

Mit Regulären Ausdrücken wirst du deinen Text sicherlich parsen können. Aber ohne ihn zu sehen kann man da auch keine weiteren auskünfte zu geben wie das Pattern dann auszusehen hätte.

Die Funktionen die dir Possitionen zurückliefern kannst du in verbindung mit substr() verwenden. 

Aber wie gesagt am einfachsten du zeigst Text von dem das geparst werden soll oder ließt dich selbst in die Materie ein: 
http://www.php-resource.de/tutorials/read/10/1/


----------



## ShOrtYk (31. August 2007)

Danke, ich versuchs erst nochmal selbst.

Trotzdem noch eine Frage:
Wenn ich mit explode den Text teile, wie kann ich dann verhindern, dass mir bei meinem letzten Eintrag der Rest des Textes mit ausgegeben wird?
Also, dass das letzte Explodeergebnis an einer bestimmten Stelle aufhört.


----------



## ShOrtYk (31. August 2007)

Ich bin jetzt schon relativ weit alleine zurecht gekommen.
Hab im Prinzip nur noch zwei Probleme.
Eins davon ist, dass ich alle Buchstaben aus dem String filtern will, sodass nur noch die Zahlen übrig sind. Wie mach ich das?


----------



## maeTimmae (31. August 2007)

```
$new = preg_replace('=([^0-9]+)=s', '', $string); // ersetzt alle nicht numerischen Zeichen
$new = preg_replace('=([^a-z]+)=s', '', $string); // ersetzt alle alphabetischen Zeichen
```


----------



## ShOrtYk (1. September 2007)

Danke 

Also bisher komm ich noch immer ganz gut selbst voran, nur nochmal eine Frage...
Gibt es die strrchr Funktion auch für Suchen, die auf mehr als ein Zeichen achten sollen?
strrchr sucht ja nach dem letzten Vorkommen eines Zeichens. Ich müsste aber nach dem letzten Vorkommen eines ganzen Wortes suchen, was damit nicht funktioniert.
Leider finde ich da auch keine Funktion zu.
Gibts da was?


----------



## ShOrtYk (1. September 2007)

Die letzte Frage von vorhin hat sich jetzt mittlerweile auch erledigt, habs anders gelöst.
Jetzt bin ich fast fertig.

Hab alle Werte aus dem kopierten Text in zwei Arrays.
Jetzt steh ich allerdings wieder vor einem Problem.
Der jeweils n. Werte beider Arrays gehört zusammen.
Also Wert1 aus Array1 gehört zu Wert1 aus Array2.
Jetzt möchte ich das alles in eine MySQL Tabelle schreiben, deren Felder in der Tabelle die Namen von Array2 tragen. Wie kann ich jetzt jeweils den Wert aus Array1 in das Feld schreiben, dass den Namen von Array2 trägt?
Ich müsste wohl erstmal irgendwie beide Arrays miteinander verbinden, damit ich danach sagen kann, dass die Werte aus Array1 dort reingeschrieben werden sollen, wo das Feld in der DB Tabelle = dem Inhalt von Array2 ist.

Hat jmd einen Vorschlag? 

*edit*
Wenn ich mit array_combine() arbeite kommt 


> Warning:  array_combine() expects parameter 1 to be array, string given in C:\Programme\xampp\htdocs\ww\parser2.php on line 169



169 ist 

```
$combined = array_combine($menge, $new_time);
```
$menge sind alle Ergebnisse aus $lieferung und $new_time aus $lieferung1... jeweils halt mit bestimmten Einschränkungen
?
Hab ich doch keine Arrays?
Das sind jeweils die Ergebnis aus den Explodes, die verbunden werden müssen.

Also sowas:

```
$lieferung = explode('Transportvon', $text, -1);
$lieferung1 = explode('Transportvon', $text);
[...]
for ($x=0; $x<count($lieferung); $x++)
{}
```


----------

