PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : parsen einer grausigen .txt


Eichbjörnchen
28.09.2005, 10:37:42
Hallo alle zusammen,
erstmal möchte ich sagen, dass ich Anfänger in php bin :-)
So nun zu meiner Frage. Ich muss eine .txt Datei parsen. Diese sieht wie folgt aus:
"PT J
AU Nachname1, CJ
Nachname2, M
Nachname3, W
Nachname4, W
TI Hier steht der Titel der Publikation, der auch leider ein "ENTER"
drinnen hat und daher so weiter schreibt
SO Full source Title
DT Article
DE Schlüsselwörter des Autors, welche über
2 Zeilen gehen können
ID Noch mehr Schlüsselwörter
AB Und hier der Artikel, der über viele Zeilen(20+) geht, wie bei AU oder
TI. Der Text enthält auch );(,-
...
"
Es geht noch weiter, aber vom Aufbau ist es das Selbe.
Ich habe schon im Internet gesucht, in Foren gesucht, habe auch Ansätze gefunden, aber da ich Anfänger bin, komme ich nicht weiter.
wie z.B.: preg_match_all, was bedeuten da diese Zeichen, wie in preg_match_all("|<[^>]+>(.*)</[^>]+>|U", ???
oder explode.
Ich habe es auch schon mit fopen, file,... versucht. Öffnen kann ich die Datei, komplett ausgeben auch, aber halt net parsen, damit ich sie später in die Datenbank laden kann.
Ach ja, es sind mehrere Publikationen, wie das Beispiel in einer .txt. So an die 500+, dass ist auch der Grund, warum ich es net von Hand in die Datenbank schreiben will.
Ich möchte mich schon mal für jeden kleinen Hinweis bedanken. Aber denkt dran, bin noch Anfänger :-)

PS: Eigentlich sollte, wenn der Text über die Zeile hinweg in eine neue geht, direkt unter dem anderen Text stehen und nicht von vorne anfangen, will aber net so wirklich. Nur die Abkürzungen, wie AU stehen vorne.

c4
28.09.2005, 11:05:13
Entweder habe ich es überlesen oder Du nicht hingeschrieben: WAS willst Du parsen?

Soll die Datei etwa im Ganzen in die DB?

Eichbjörnchen
28.09.2005, 11:19:15
Sorry, ich will in der Datenbank zu jeder Abkürzung den Eintrag rein schreiben. Zu AU soll der Autor rein, zu TI den Titel. Jede Publikation soll ihre eigene ID bekommen. Wie die Datenbank aussehen soll, dass hab ich mir schon überlegt, auch das Problem mit den verschiedenen Autoren, Koautoren
Ich hoffe ich habe mich einigermaßen verständlich ausgedrückt :-)

Aber danke für die schnelle Antwort

c4
28.09.2005, 12:23:19
Gut, hab's verstanden.

Ich würde auch denken, dass es mit regulären Ausdrücken, geht, habe es aber noch nicht geschafft. Sieht so aus: $text="PT J
AU Nachname1, CJ
Nachname2, M
Nachname3, W
Nachname4, W
TI Hier steht der Titel der Publikation, der auch leider ein \"ENTER\"
drinnen hat und daher so weiter schreibt
SO Full source Title
DT Article
DE Schluesselwörter des Autors, welche über
2 Zeilen gehen können
ID Noch mehr Schluesselwörter
AB Und hier der Artikel, der ueber viele Zeilen(20+) geht, wie bei AU oder
TI. Der Text enthaelt auch );(,-
...";

$keywords=array('PT', 'AU', 'TI', 'SO', 'DT', 'DE', 'AB', 'ID', 'CJ');
$keywords='^'.join('|^', $keywords);

// Er holt die Zeilenumbrueche nicht mir raus?
preg_match_all("/(($keywords) (.*))*$/msU", $text, $result);

echo '<xmp>';
var_dump($result); Falls wer das Fehlerchen findet: ich wissen will!

Eichbjörnchen
28.09.2005, 12:55:39
Noch ne Frage. Was bedeuten eigentlich bei preg_match_all diese ".*))*$/msU" Befehle? Ich hab die auch schon auf einer Seite, wo preg_match_all erklärt wird, gesehen (preg_match_all("|<[^>]+>(.*)</[^>]+>|U",), aber ich kann damit nix anfangen. Wo bekomme ich Infos darüber her?
Danke

c4
28.09.2005, 13:00:04
Ein paar Links:
--> http://tut.php-q.net/regex.html
--> http://php-faq.de/ch/ch-regexp.html
--> http://php.net/preg_match_all

Viel Spaß damit! :)

xabbuh
28.09.2005, 16:11:09
Außerdem:
- http://de2.php.net/manual/en/reference.pcre.pattern.syntax.php
- http://de2.php.net/manual/en/reference.pcre.pattern.modifiers.php
- http://www.regenechsen.de/regex_allg_de/regex_allg.php