parsen

Status
Nicht offen für weitere Antworten.

hegoat

Mitglied
hallo,
ich habe ein code wo mir erstmal mein quelldatei einliest.sieht so etwa aus.

A->B [label="0"]
C->D [label="10"]
E->F [label="20"]
C->F [label="30"]

Jetzt möchte ich die Datensätze zeilenweise parsen, und die Transition sollen erkannt werden. Heisst es, dass man z.B Startknoten, Endknoten und die Labels zeilenweise ausgibt?

Habe mit strLine.indexOf("->") und ähnliches probiert, habe aber 3 Programme die Extra Startknoten, Transition und Endknoten, und [label="x"] ausgeben.
Hätte jemand ein Paar tips wie ich das am geschicktestens machen kann?
 
G

Guest

Gast
Beispiel:

Code:
public class Main {

    static String[] data = new String[]{
        "A->B [label=\"0\"]",
        "C->D [label=\"10\"]",
        "E->F [label=\"20\"]",
        "C->F [label=\"30\"]"
    };
    
    public static void main(String[] args) {
        String pattern = "(.*)\\-\\>(.*)\\[label\\=\\\"(.*)\\\"\\]";
        Pattern p = Pattern.compile(pattern);

        for (int i = 0; i < data.length; i++) {

            Matcher m = p.matcher(data[i]);
            if (m.matches()) {
                System.out.println("1. = " + m.group(1));
                System.out.println("2. = " + m.group(2));
                System.out.println("3. = " + m.group(3));
            } else {
                System.out.println("No Match");
            }
            System.out.println("-----------------------");
        }

    }

}

Ausgabe:

1. = A
2. = B
3. = 0
-----------------------
1. = C
2. = D
3. = 10
-----------------------
1. = E
2. = F
3. = 20
-----------------------
1. = C
2. = F
3. = 30
-----------------------
 
G

Guest

Gast
Nachtrag:

Code:
import java.util.regex.*;

fehlt im Beispiel oben noch
 

hegoat

Mitglied
danke für die schnelle Antwort.
ein Problem habe ich noch, ich habe erstmal mein quell datei eingelesen, und möchte wie oben weiter machen.


das sieht so aus;


public static void main(String args[])
{
try{

FileInputStream fstream = new FileInputStream ("digraph1");

DataInputStream in = new DataInputStream(fstream);
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String strLine;

while ((strLine = br.readLine()) != null) {

System.out.println(strLine);
}

in.close();
}catch (Exception e)
{

System.err.println("Error: " + e.getMessage());
}
}

}
 
S

SlaterB

Gast
das Problem ist, dass hegoat nicht den Quellcode aus Post 2 komplett kopieren und einfügen kann,
sondern dass Anpassungen erforderlich sind, und sie es nur die Wahl des Eingabestrings..
 

hegoat

Mitglied
Du hast anhand

"A->B [label=\"0\"]",
"C->D [label=\"10\"]",
"E->F [label=\"20\"]",
"C->F [label=\"30\"]"

das Pattern aufgebaut.
Da ich mein Quelldatei erstmal mit dem obigen Code einlese, weiss ich nicht, wie ich das anfangen soll mit dem pattern aufbau.
muss ich z.b das quelldatei "digraph" oder "strLine"--sieh bitte den code

bei
static String[] data = new String[]{
" xxxxxxx"
};

irgendwie aufrufen bzw definieren.

mein quelldatei (digraph) enthält die daten

"A->B [label=\"0\"]",
"C->D [label=\"10\"]",
"E->F [label=\"20\"]",
"C->F [label=\"30\"]".
 
S

SlaterB

Gast
die einzelnen strLine in eine Liste wie ArrayList,
danach kannst du ein Array draus machen oder auch die Matcher-Schleife direkt auf die Liste ausführen, das geht genauso,

und muss auch nicht irgendwo statisch definiert sein,
sondern kann auch als Parameter übergeben werden
 
G

Guest

Gast
Du hast anhand

(static String[] data = new String[]{ )
"A->B [label=\"0\"]",
"C->D [label=\"10\"]",
"E->F [label=\"20\"]",
"C->F [label=\"30\"]"
(})

das Pattern aufgebaut.


Nein, das ersetzt die Datei. Die Daten sind hier in einem Array gespeichert und nicht in einer Datei.

Du solltest dich mal mit Arrays beschäftigen...

Das 'for (int i = 0; i < data.length; i++) { ....}' ist die Schleife zum lesen der Daten,
wie dein 'while ((strLine = br.readLine()) != null) { ...}' in der Version, die aus der Datei liest.

Die aktuelle Zeile steht bei dir in 'strLine' und bei mir in 'data'.


Der finale Code müsste etwa so aussehen:

Code:
import java.io.*;
import java.util.regex.*;

public class Main {

    public static void main(String[] args) {
   
        String filename = "C:\\Testfile.txt";

        String pattern = "(.*)\\-\\>(.*)\\[label\\=\\\"(.*)\\\"\\]";
        Pattern p = Pattern.compile(pattern);

        try {

            FileInputStream fstream = new FileInputStream(filename);

            DataInputStream in = new DataInputStream(fstream);
            BufferedReader br = new BufferedReader(new InputStreamReader(in));
            String strLine;

            while ((strLine = br.readLine()) != null) {

                Matcher m = p.matcher(strLine);
                if (m.matches()) {
                    System.out.println("1. = " + m.group(1));
                    System.out.println("2. = " + m.group(2));
                    System.out.println("3. = " + m.group(3));
                } else {
                    System.out.println("No Match");
                }
                System.out.println("-----------------------");
            }

            in.close();
            
        } catch (Exception e) {

            System.err.println("Error: " + e.getMessage());
            e.printStackTrace();

        }
    
    }

}
 

hegoat

Mitglied
mein eingeleste file sieht etwa so aus

A_J_f -> B_D_d [label=\"10\"]

String pattern = "(.*)\\-\\>(.*)\\[label\\=\\\"(.*)\\\"\\]" scheint das nicht so zulösen, da ich "No match" erhalte.

Wie kann ich z.B A_J_f als gruppe bilden.
 
G

Guest

Gast
A_J_f -> B_D_d [label=\"10\"]

oder

A_J_f -> B_D_d [label="10"]


den zweiten Fall kann das Pattern auflösen (habe ich getestet...).
Die \ braucht der Code nur um ein " in einem String einzufügen,
ich gehe davon aus, dass in der Datei kein \ steht, so wie in deinem 1. Post angegeben.


ggf. ein Leerzeichen nach der rechten Klammer?


Probier mal

Matcher m = p.matcher(strLine.trim());
 

hegoat

Mitglied
hier ein teil meiner eingeleste Datei


INIT_BEFORE_DECIDER_ASYNC->RULEENGINE_BEFORE_DECIDE [label="0"];
HF_ATTACH_START->HF_ATTACH_END [label="0"];
PROCESS_INSTANCE_FINAL->PROCESS_MGR_MSG_RECEIVED_END [label="0"];
CORRELATOR_STORE_ATTACH_START->STORE_ATTACHMENT_START [label="0


von dem Codeunten erhalte ich "No Match".

Mein Zeil ist das so zu Parsen das ich die Knoten separat habe und die labels auch.
z.B

Anfang Knoten: = INIT_BEFORE_DECIDER_ASYNC
End Knoten: = INIT_BEFORE_DECIDER_ASYNC
Label: = 0




import java.io.*;
import java.util.regex.*;

public class GraphPattern {

public static void main(String[] args) {

String filename = "digraph1";

String pattern = "(.*)\\-\\>(.*)\\[label\\=\\\"(.*)\\\"\\]\\;";
Pattern p = Pattern.compile(pattern);

try {

FileInputStream fstream = new FileInputStream(filename);

DataInputStream in = new DataInputStream(fstream);
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String strLine;

while ((strLine = br.readLine()) != null) {

Matcher m = p.matcher(strLine.trim()); if (m.matches()) {
System.out.println("Anfang Knoten: = " + m.group(1));
System.out.println("End Knoten: = " + m.group(2));
System.out.println("Label: = " + m.group(3));
} else {
System.out.println("No Match");
}
System.out.println("-----------------------");
}


in.close();

} catch (Exception e) {

System.err.println("Error: " + e.getMessage());
e.printStackTrace();

}

}

}
 
S

SlaterB

Gast
was bringt die Menschen nur immer dazu, von Dateien einzulesen?
um das Pattern zu testen kannst du doch genausogut den String in den Quellcode schreiben:

Code:
public class Test
{

    public static void main(String[] args)
        throws Exception
    {

        String pattern = "(.*)\\-\\>(.*)\\[label\\=\\\"(.*)\\\"\\]\\;";
        Pattern p = Pattern.compile(pattern);

        String strLine = " INIT_BEFORE_DECIDER_ASYNC->RULEENGINE_BEFORE_DECIDE [label=\"0\"]; ";

        Matcher m = p.matcher(strLine.trim());
        if (m.matches())
        {
            System.out.println("Anfang Knoten: = " + m.group(1));
            System.out.println("End Knoten: = " + m.group(2));
            System.out.println("Label: = " + m.group(3));
        }
        else
        {
            System.out.println("No Match");
        }


    }


}
so, damit gehts, warum mit deiner Datei nicht, ist mir nun auch ein Rätsel aber eins ist ganz gewiss:
am Pattern liegt es nicht

nun musst du den eingelesenen String genauer anschauen, notfalls Buchstabe für Buchstabe mit der Zeile als Java-String vergleichen

---------

vewende übrigens besser BufferedReader auf einem FileReader,
nicht BufferedReader auf DataInputStream auf FileInputStream
 
G

Guest

Gast
So kommen wir nicht weiter...

bitte erweiter mal deine 'No Match' Zeile wie folgt:

System.out.println("No Match >" + strLine + "<");

und dann schreib mal was er ausgibt.
 

hegoat

Mitglied
Danke!
Ist somit getan. Ich erhalte die Ergebnisse wie gewollt und dazu die Lines wo es kein Match gefunden wurde.
 

hegoat

Mitglied
ich hätte da noch eine Frage. bis jetzt würde mein quellcode eingelesen. möchte jetzt die Zieldatei schreiben . Wie geht das?
 

Kapitän

Bekanntes Mitglied
Wenn du dir sicher bist, dass du Leerzeichen zwischen den Knoten hast, kannst du auch die Klasse Scanner benutzen.

PS: Gdi2 TUD?
 

Kapitän

Bekanntes Mitglied
hallo,

ich habe ein ganz ähnliches Problem, aber der Pattern nicht zu matchen.

Wahrscheinlich lingt's an meiner Patterndefinition.

Ein String sieht bei mir so aus: A -> B [label="75"]
Also, fast genauso wie beim Threadersteller, nur dass bei mir Leerzeichen zwischen den einzelnen Elementen sind.

A(Leerzeichen)->(Leerzeichen)B(Leerzeichen)[label="75"]

Wie muss ich den Pattern verändern, damit er bei mir matcht?

String pattern = "(.*)\\-\\>(.*)\\[label\\=\\\"(.*)\\\"\\]";

Oder überspringt er einfach Leerzeichen, und der Fehler liegt woanders?
 
S

SlaterB

Gast
übersprungen wird nicht, aber Leerzeichen kannst du auch einfügen

Tipp: übe erstmal einfache Pattern, z.B "x y" zu matchen
 

Kapitän

Bekanntes Mitglied
Also, die Leerzeichen brauche ich natürlich nicht für meine Auswertung.
Ich habe jetzt viel rumprobiert mit \p und \s, komme aber nicht ans Ziel.
Wie mach ich denn das?
 
S

SlaterB

Gast
die große dicke Taste auf deiner Tastatur


(Tipp: wenn etwas konkrete nciht geht immer ganze Beispiele dazu posten)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
Beowend String zu Date parsen Java Basics - Anfänger-Themen 1
W Strings und das parsen Java Basics - Anfänger-Themen 8
R String index out of range: -1 beim Datei Parsen Java Basics - Anfänger-Themen 15
K String nach bestimmtem Muster parsen Java Basics - Anfänger-Themen 3
K Datentypen String zu Integer parsen Java Basics - Anfänger-Themen 2
L Jackson JSON parsen Java Basics - Anfänger-Themen 7
7.7GradOst Datentypen Stringeingabe aus z.B. "4,d,<" parsen Java Basics - Anfänger-Themen 7
D InputStream parsen und als Bilddatei abspeichern Java Basics - Anfänger-Themen 1
M JAVA String schnell parsen Java Basics - Anfänger-Themen 14
K Methoden Datum parsen Java Basics - Anfänger-Themen 16
V Java Regex richtig parsen Java Basics - Anfänger-Themen 2
J Rekursives Parsen (ohne Reg Expressions) Java Basics - Anfänger-Themen 8
L Beliebigen Datentypen aus String parsen Java Basics - Anfänger-Themen 6
L Datei aus Multipart parsen und speichern, seltsam codiert? Java Basics - Anfänger-Themen 16
J String aus Json File parsen Java Basics - Anfänger-Themen 6
S Date parsen klappt nicht richtig Java Basics - Anfänger-Themen 3
M Webseiten Parsen Java Basics - Anfänger-Themen 2
M Input/Output Probleme beim Parsen von CSV und TXT Dateien Java Basics - Anfänger-Themen 7
V Umlaute beim Parsen einer HTML Seite Java Basics - Anfänger-Themen 4
P String parsen Java Basics - Anfänger-Themen 5
S fehler beim datum parsen Java Basics - Anfänger-Themen 6
T Klassen CSV datei einlesen und parsen Java Basics - Anfänger-Themen 4
F Methoden Termin parsen Java Basics - Anfänger-Themen 2
Luk10 String (Hexadezimal) zu int parsen Java Basics - Anfänger-Themen 12
O Nicht Standard Form boolesche Funktion in Standard Form parsen Java Basics - Anfänger-Themen 3
E Datentypen Unvollständiges Datum parsen Java Basics - Anfänger-Themen 8
U Website parsen Java Basics - Anfänger-Themen 11
D Java - OutOfMemoryError beim Parsen Java Basics - Anfänger-Themen 15
J String zu Double parsen (multiple points) Java Basics - Anfänger-Themen 2
K Fehlerbehandlung beim Parsen von Strings Java Basics - Anfänger-Themen 9
F Datum AM / PM parsen Java Basics - Anfänger-Themen 5
A Datentypen Datum mit "May" zu Date parsen Java Basics - Anfänger-Themen 6
F Datum parsen Java Basics - Anfänger-Themen 6
R Datumsformatierung parsen Java Basics - Anfänger-Themen 8
E Code parsen/ formatieren Java Basics - Anfänger-Themen 3
G String parsen Java Basics - Anfänger-Themen 3
J int Wert mit getter holen und in String parsen Java Basics - Anfänger-Themen 5
trash Double Parsen? Java Basics - Anfänger-Themen 3
M Datum parsen Java Basics - Anfänger-Themen 10
A Parsen von double zu int? Java Basics - Anfänger-Themen 2
L String zu Enum parsen Java Basics - Anfänger-Themen 8
L String zuverlässig nach Char parsen? Java Basics - Anfänger-Themen 4
S String KeyEvent parsen Java Basics - Anfänger-Themen 2
D Datum parsen Java Basics - Anfänger-Themen 11
H XML Parsen Java Basics - Anfänger-Themen 7
J HTML mit XPath parsen Java Basics - Anfänger-Themen 7
H Gleichung parsen Java Basics - Anfänger-Themen 10
Spin SAX parsen ..XML not found Java Basics - Anfänger-Themen 2
W String zu Calendar parsen Java Basics - Anfänger-Themen 4
S String Parsen Java Basics - Anfänger-Themen 3
T Zeitwerte parsen Java Basics - Anfänger-Themen 6
J Scanner - Zeile parsen Java Basics - Anfänger-Themen 8
S String parsen Java Basics - Anfänger-Themen 17
W Char in String parsen Java Basics - Anfänger-Themen 6
E Wochentag String parsen Java Basics - Anfänger-Themen 2
S Ascii Datei parsen Java Basics - Anfänger-Themen 2
bugmenot args parsen Java Basics - Anfänger-Themen 3
G Swing xml parsen - Office Java Basics - Anfänger-Themen 8
M Bilder "parsen" Java Basics - Anfänger-Themen 5
G String parsen Java Basics - Anfänger-Themen 7
G Char Wert in Int Wert parsen Java Basics - Anfänger-Themen 10
P HTML parsen Java Basics - Anfänger-Themen 2
K Objekte zurück parsen Java Basics - Anfänger-Themen 2
D xml parsen mit Java Java Basics - Anfänger-Themen 5
G Vector Strijng parsen Java Basics - Anfänger-Themen 6
G Url parsen? Java Basics - Anfänger-Themen 3
M probleme beim parsen Java Basics - Anfänger-Themen 7
T Beim XML-Parsen Text einlesen Java Basics - Anfänger-Themen 5
C parsen Java Basics - Anfänger-Themen 2
G Parsen eines Strings Java Basics - Anfänger-Themen 4
M Object[] parsen Java Basics - Anfänger-Themen 9
E Mathematisch parsen, aber mit einer Variablen X ! Java Basics - Anfänger-Themen 6
N Int parsen Java Basics - Anfänger-Themen 3
D Array Parsen Java Basics - Anfänger-Themen 4
N Datum parsen Java Basics - Anfänger-Themen 3
P Datei mit Strings parsen Java Basics - Anfänger-Themen 4
M Html Parsen / Values von Hidden Fields auslesen Java Basics - Anfänger-Themen 10
W html parsen Java Basics - Anfänger-Themen 2
K Tokens in Integer parsen Java Basics - Anfänger-Themen 2
D HTML-Datei einlesen/parsen Java Basics - Anfänger-Themen 9
J java script mit java parsen Java Basics - Anfänger-Themen 6
G parsen von double zu int Java Basics - Anfänger-Themen 4
RaoulDuke java.util.Date parsen Java Basics - Anfänger-Themen 5
B Problem beim XML-Parsen Java Basics - Anfänger-Themen 10
G Parsen des Datums nicht möglich! Wer kann helfen? Java Basics - Anfänger-Themen 7
M.C.S. String parsen in Java Java Basics - Anfänger-Themen 5
T Parsen einer Datei? Java Basics - Anfänger-Themen 3
R Website mit Java parsen Java Basics - Anfänger-Themen 4
S String nach boolean parsen! Java Basics - Anfänger-Themen 5
M regulärer Ausdruck zum Parsen einer E-Mail Signatur Java Basics - Anfänger-Themen 16
C Text mit Trennzeichen parsen (Bsp. Ich/esse/heute/Eis) Java Basics - Anfänger-Themen 9
A Parsen einer XML-Datei: Wo sind meine Start-Tags??? Java Basics - Anfänger-Themen 22
A erste Schritte auf dem Weg eine XML-Datei zu parsen Java Basics - Anfänger-Themen 2
F Kommandozeile parsen Java Basics - Anfänger-Themen 6
T XML Parsen und Inhalt in ein Byte Array schreiben Java Basics - Anfänger-Themen 3
P String zu Date bei jedem Tastendruck parsen Java Basics - Anfänger-Themen 3
V logfile parsen Java Basics - Anfänger-Themen 7
D HTML Code einlesen und nach Links parsen Java Basics - Anfänger-Themen 10
M String array in Int array parsen und umgekehrt Java Basics - Anfänger-Themen 6
D String in einen primitiven datentypen parsen Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben