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-ID: 327473

Url: https://administrator.de/forum/txt-datei-auslesen-und-bestimmte-zeilen-in-variable-setzen-327473.html

Ausgedruckt am: 23.04.2025 um 02:04 Uhr

Kraemer
Kraemer 25.01.2017 aktualisiert um 15:54:46 Uhr
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`
126594
126594 25.01.2017 aktualisiert um 16:05:34 Uhr
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.
Kraemer
Kraemer 25.01.2017 um 16:11:49 Uhr
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.
131381
131381 25.01.2017 aktualisiert um 16:41:39 Uhr
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
Kraemer
Kraemer 25.01.2017 aktualisiert um 16:46:37 Uhr
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...
131381
131381 25.01.2017 aktualisiert um 16:52:39 Uhr
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.
Kraemer
Kraemer 25.01.2017 aktualisiert um 16:56:08 Uhr
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
131381
131381 25.01.2017 aktualisiert um 17:03:28 Uhr
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.
126594
126594 27.01.2017 um 16:01:25 Uhr
Goto Top
Vielen Dank!

Ich probiere schon ne Weile rum, zur Zeit ist der Groschen aber noch nicht gefallen :D
131381
Lösung 131381 27.01.2017 um 16:29:02 Uhr
Goto Top
"/^Strasse ([^\d]+) ([\da-z\-\ ]+)/mi"  
126594
126594 06.02.2017 um 11:54:50 Uhr
Goto Top
Vielen Dank face-smile