126594
Goto Top

TXT Datei auslesen und bestimmte Zeilen in Variable setzen

Hallo zusammen,

vorweg muss ich sagen, ich bin (bis jetzt) absoluter Neuling was PHP angeht.

Ich will aus einer TXT Datei ein paar Zeichenfolgen finden und den nachfolgenden Text als Variable setzen.

Um genau zu sein, will ich u.a. die Zeile, die mit "Strasse" beginnt finden und den nachfolgenden Text (Strassennamen und Hausnummer) in die variablen $strasse und $hausnr speichern. Das gleiche noch mit der Zeile "Stadt".

Ich hab jetzt schon ein wenig mit dem Befehl preg_match experimentiert. Komme aber leider nicht zum gewünschten Erfolg.

Wäre super, wenn mir hier jemand helfen (und villeicht auch wa in ein paar Sätzen erklären) könnte ;)

Vielen Dank euch schon mal im voraus.

Viele Grüße Markus!

Content-Key: 327473

Url: https://administrator.de/contentid/327473

Printed on: May 8, 2024 at 00:05 o'clock

Member: Kraemer
Kraemer Jan 25, 2017 updated at 14:54:46 (UTC)
Goto Top
Moin,

der Ansatz mit regular expressions zu arbeiten ist schon einmal gut. Hier kannst du damit ein wenig rumspielen. Zur Syntax findest du zu Hauf Informationen im Netz - musst selbst mal gucken, welche Seite dir zusagt.

Gruß Krämer

Beispiel zum Einstieg:
Straße: Lange Straße 30

^Straße: (.*) (.*)$

Full match	0-23	`Straße: Lange Straße 30`
Group 1.	8-20	`Lange Straße`
Group 2.	21-23	`30`
Mitglied: 126594
126594 Jan 25, 2017 updated at 15:05:34 (UTC)
Goto Top
Danke für deine Antwort.

Ich komme nur gerade nicht so ganz mit :D

Die Zeile mit der Strasse, steht in der Date test.txt, bzw. in der Variable $test wie rufe ich die auf?

Das Ergebnis ist genau das was ich suche.
Member: Kraemer
Kraemer Jan 25, 2017 at 15:11:49 (UTC)
Goto Top
Den Link habe ich nicht um sonst gepostet. Ohne das du verstehst, wie RegEx funktioniert, wirst du mit deiner Fragestellung schlicht nicht weiter kommen. Guck dir den Link an - teste mal mit den Daten und lies dann noch einmal die Hilfe zu preg_match. Dann sollte einiges klarer für dich werden.
Mitglied: 131381
131381 Jan 25, 2017 updated at 15:41:39 (UTC)
Goto Top
Hi.
Hier mal ein einfaches Beispiel für Anfänger:
Beispiel-Texdatei:
Bsakjsldfjaf
sdf
sdfsdfasdfdsfs
Strasse Berliner Ring 77-88b
Bljsdflkjsdfölksf
Code
// Dateiinhalt auslesen
$content = file_get_contents("test.txt");  
//Match mit Submatches für Straße und Nr.
$result = preg_match("/^Strasse (.*) (.*)/mi",$content,$match);  
// Wenn der Regex zutrifft dann gebe die Submatches des matches aus.
if ($result){
   echo "Strasse: " . $match[1] ."<br />";  
   echo "Nr: " . $match[2] . "<br />";  
}else{
echo "Kein Treffer"  
}
Ergebnis:
Strasse: Berliner Ring
Nr: 77-88b

Hier noch die Erläuterung zum Regex Pattern:
Options: Case insensitive; Exact spacing; Dot doesn’t match line breaks; ^$ match at line breaks; Greedy quantifiers

Assert position at the beginning of a line «^»
Match the character string “Strasse ” literally «Strasse »
Match the regex below and capture its match into backreference number 1 «(.*)»
   Match any single character that is NOT a line break character «.*»
      Between zero and unlimited times, as many times as possible, giving back as needed (greedy) «*»
Match the character “ ” literally « »
Match the regex below and capture its match into backreference number 2 «(.*)»
   Match any single character that is NOT a line break character «.*»
      Between zero and unlimited times, as many times as possible, giving back as needed (greedy) «*»
Gruß mik
Member: Kraemer
Kraemer Jan 25, 2017 updated at 15:46:37 (UTC)
Goto Top
Zitat von @131381:

Hi.
^Straße: (.*) (.*)$
Ist natürlich falsch
Es ist nicht falsch - es ist nur ungenügend - sprich keine r...l v...e Komplettlösung. Mein Vorschlag war nur als Einstieg und vor allem für die verlinkte Seite gedacht.

PS: Schön das du dein falsches Pattern so transparent geändert hast...
Mitglied: 131381
131381 Jan 25, 2017 updated at 15:52:39 (UTC)
Goto Top
Zitat von @Kraemer:
PS: Schön das du dein falsches Pattern so transparent geändert hast...

^Strasse ([^\r\n]+) ([^\r\n]+)
Funktioniert auch ist hier nur unnötig wenn man Flag s nicht setzt, deswegen Änderung. War grad ne andere Baustelle.
Member: Kraemer
Kraemer Jan 25, 2017 updated at 15:56:08 (UTC)
Goto Top
Wo eir gerade so schön über Pros und Cons reden: Für den TO: Unsere beiden Lösungen gehen davon aus, dass die Hausnummer - wie auch immer geartet - ohne Leerzeichen daher kommt. Ein "30 a" z.B. wird nicht funktionieren. Da müsste das RegEx noch entsprechend angepasst werden.

Gruß Krämer
Mitglied: 131381
131381 Jan 25, 2017 updated at 16:03:28 (UTC)
Goto Top
Jepp, das ist dann seine Hausaufgabe das für sich zu definieren und welche Varianten er unterstützen möchte.
Könnte man z.B. in der Straße alle Zeichen ohne Zahlen nehmen und im Nummernmatch auch Spaces zulassen.
Mitglied: 126594
126594 Jan 27, 2017 at 15:01:25 (UTC)
Goto Top
Vielen Dank!

Ich probiere schon ne Weile rum, zur Zeit ist der Groschen aber noch nicht gefallen :D
Mitglied: 131381
Solution 131381 Jan 27, 2017 at 15:29:02 (UTC)
Goto Top
"/^Strasse ([^\d]+) ([\da-z\-\ ]+)/mi"  
Mitglied: 126594
126594 Feb 06, 2017 at 10:54:50 (UTC)
Goto Top
Vielen Dank face-smile