Zeilen aus text auslesen

hallo,

ich sitze gerade dabei ein programm zu schreiben, dass automatisch EDIFACT-Dateien einlist, parst und in XML umwandelt.

dabei bin ich auf folgendes problem gestoßen:

ich möchte die zeilen auslesen und entsprechend der ersten 3 zeichen einer jeden zeile eine bestimmte anweisung machen…

so sieht die datei etwa aus


UNB+…
DAT+…

dabei weiß ich welche möglichkeiten es gibt, jedoch können manche mehrmals vorkommen, so dass ich nicht statisch die zeilennummern vergeben kann.

wenn mir einer helfen kann, und sagen kann wie man an dieses problem heran gehen könnte wäre ich sehr dankbar

marco

Hallo,

http://www.google.de/search?hl=de&ie=UTF-8&oe=UTF-8&…

mfg
deconstruct

danke - das habe ich auch schon gemacht - sind leider nicht die sachen bei die ich suche!

mir geht es besonders darum, texte einzulesen die jedes mal anders aufgebaut sind und unterschiedlich lang sind, aber in etwa den selben inhalt haben…

daher wollte ich mit
switch case arbeiten
dort wird aber eine konstante benötigt, die ich nicht geben kann, da die zeilenanzahl variabel ist

genauso wenig kann ich eine for-schleife benutzen, da ich dort keine variablen als initilisirung nutzen kann (i=anzahl,1>0,i–) : das geht nicht

nun wollte ih wissen wie man da wieter machen kann und wie man da möglichst nicht statisch herangehen kann…

Hallo,

ich versteh immer noch nicht das Problem.
Du hast eine Datei, in der tauchen irgendwann in den ersten 3 Zeichen bestimmte „Befehle“ auf. Wenn so einer kommt, willst du irgendwas machen, oder?

Naja, dann ließt du die Datei eben zeilenweise ein, schaust dir von der Zeile die ersten drei Buchstaben an und wenn die identisch sind mit irgendwas, dann rufst du eine Methode auf.

Also einfach

String line = new String();
BufferedReader br = new BufferedReader(...)

while ((line = br.readLine()) != null) {
 
 if (erste3ZeichenVon(line).equals("FOO")) {
 doFoo();
 } else if (erste3ZeichenVon(line).equals("BAR")) {
 doBar();
 }

}

Oder willst du was ganz anderes machen?

mfg
deconstruct

ich sitze gerade dabei ein programm zu schreiben, dass
automatisch EDIFACT-Dateien einlist, parst und in XML
umwandelt.

Du Armer, vor dem Problem bin ich auch mal gestanden (nur dass es kein XML war, aber was ähnliches).

wenn mir einer helfen kann, und sagen kann wie man an dieses
problem heran gehen könnte wäre ich sehr dankbar

Für das parsen von Textstrukturen aller Art gibt es sogenannte Parser-Generatoren. Ich verwende JavaCC (https://javacc.dev.java.net/). Um sowas zu verwenden brauchst du zwar ein bißchen Einarbeitung, danach kannst du damit aber viel schneller und einfacher Parser entwickeln als wenn du das alles selber ausprogrammieren würdest.

Wenn du mit dem JavaCC arbeiten möchtest, schau dir dort einfach mal das Tutorial an, nach ein paar Stunden gehts dann schon los. :smile:

Falls du irgendwelche Fragen zu JavaCC hast oder Probleme mit dem Implementieren der EDI-Grammatik in JavaCC kann ich dir gerne weiterhelfen, ich kann dir leider nur nicht den Code den ich produziert habe schicken, war für ein kommerzielles Projekt.

Bei mir war der EDI-Parser mit JavaCC recht einfach hinzukriegen, das einzige Problem das ich nicht lösen könnte war, dass es in dem EDI laut Segmente geben kann die mitten im EDI-Datenstrom die Steuerzeichen (Segment Terminator, Repetition Terminator etc.) umdefinieren. Sowas hat man mit dem damaligen Funktionsumfang vom JavaCC (ist schon eine Weile her) nicht wirklich abbilden können. Falls du das aber nicht berücksichtigen musst (hängt davon ab wie deine Anforderungen sind), dann kein Problem.

Für die Konvertierung von EDI in XML gibt es aber auch kommerzielle Tools, schau vielleicht mal einfach im Google.

Grüße, Robert