Aus Datei String extrahieren

oraclin25

Erfahrenes Mitglied
Hallo zusammen,

ich habe eine im Gig-Bereich große Text-Datei(es ist eigentlich eine XML-Datei). In der Datei existieren viele solche Strings:
... name="Ratna" datum="20-01-2014" ...
... geburtsort="Gütersloh" name="Peter" datum="20-01-2014" ...
...

Ich würde gerne lediglich ALLE Namen aus diesem File holen und einfach eine neue Datei ergebnis.txt umleiten:
Ratna
Peter
...
...

Ich möchte aber gerne auf einen Parser verzichten. Hat jemand eine Idee wie ich das mit Java hinkriege? Also, geht in die Richtung grep, wenn man mit Shell macht, oder?

Vielen lieben Dank für Eure Tipps.

Viele Grüße aus Rheinland,

Eure Ratna
 
Moin,

na ja, so ganz wirst Du um's Parsen wohl nicht rumkommen (auch "grep" ist eine Art Parser ... ) !

Du hast (je nach Kenntnisstand ;) ) mehere Möglichkeiten, wobei es bei einem Gigabyte großen Text sicherlich etwa komplexer wird.
Stichworte wären hier etwa: splitten / reguläre Ausdrücke / Substring ...

Du könntest Deinen Text bspw. immer bis zum nächsten Zeilenumbruch einlesen und den dann jeweils eingelesenen Teil entsprechend bearbeiten!

Gruß
Klaus
 
Hallo Klaus,

vielen lieben Dank für die rasche Antwort. Durch deine Tipps bin ich auf folgendes gekommen:
Pattern.compile
Pattern.matcher

Ich weiss leider nicht, wie ich den Regex zusammenbaue. Könntest Du aus dem Kopf herzaubern für meine Konstellation? ;-)

Viele Grüße aus Rheinland,

Eure Ratna
 
Bitte nimm keine regulären Ausdrücken.

XML + XPath zu nutzen, wäre eine viel saubere Option.

Schnell mal von hier kopiert: http://stackoverflow.com/questions/2811001/how-to-read-xml-using-xpath-in-java
Java:
// Code from Yishai <http://stackoverflow.com/users/77779/yishai>
// Post: http://stackoverflow.com/a/2811101/603003

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(<uri_as_string>);
XPathFactory xPathfactory = XPathFactory.newInstance();
XPath xpath = xPathfactory.newXPath();
XPathExpression expr = xpath.compile(<xpath_expression>);

Dein XPath-Query würde ganz einfach wie folgt lauten:
Code:
//@name

Alternativ - bei größeren Dateien zu empfehlen - könntest du einen SAX-Parser verwenden. Bei jedem Callback (wenn ein neuer Knoten gefunden wurde), prüfst du auf das Attribut "name". Da bei einem SAX-Parser die Datei nie vollständig in den Speicher geladen werden muss (im Gegensatz zu obigem Vorschlag und regulären Ausdrücken), ist dies viel speichereffizienter.
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück