Textdatei splitten mit mehreren Chars zB: %_N

  • VB.NET

Es gibt 23 Antworten in diesem Thema. Der letzte Beitrag () ist von majachen99.

    Textdatei splitten mit mehreren Chars zB: %_N

    Hallo zusammen,

    ich befasse mich schon lange mit dem oben genannten Prolem. Jetzt ist es wieder aktuell.
    Sorry, bin trotz eurer Hilfe von damals noch nicht weiter gekommen.
    Ich muss verschieden große Textdateien nach nicht nur einem Char trennen und die Teile in ein array schieben.
    Mit :

    VB.NET-Quellcode

    1. Splitten = Open_file.Split(Suchstring) '%_N
    2. For i = 0 To Splitten.Length
    3. Next

    wird nur am % gesplittet, es wird nur ein Char zugelasen ;(


    Mit :

    VB.NET-Quellcode

    1. Dim Lines() As String = System.IO.File.ReadAllLines("H:\ARCs\asup.spf")
    2. For i As Integer = 0 To Lines.Count - 1
    3. If Lines(i).StartsWith("%_N") Then
    4. MessageBox.Show(Lines(i))
    5. 'Exit For
    6. End If
    7. Next

    bekomme ich nur die einzelne Zeile wo %_N drin steht.

    In den Arrayteilen soll aber stehen:
    im 1. Teil:

    %_N kgkgkhkjh %kökl
    löklöklöl
    juzulklkj

    im 2. Teil:

    %_N kgkgkhkjh %kökl
    löklöklöl
    juzulklkj

    .....................





    Dann habe ich noch Dateien die am Zeihleanfang bei:

    %1
    %2
    %3
    ......

    getrennt werden sollen.

    Besten Dank im vorraus für die Hilfe.
    Fein, wenn Du uns sagst, wie das Ergebnis sein soll.
    Wie lautet denn der Ausgangsstring?
    ----
    Hilft Dir dies:
    Lies den ganzeh Text als String ein (ReadAllText(), nicht aber ReadAllLines()) wenn Du mehrzeilige Substrings erhalten willst.
    Split nach einem String, oder nach mehreren Char:

    VB.NET-Quellcode

    1. Dim txt = "zgzgzg %_N iuh IOU"
    2. Dim ll() = txt.Split({"%_N"}, StringSplitOptions.None)
    3. Dim mm() = txt.Split({"%"c, "i"c})
    Du kannst die Arrays in den geschweiften Klammern beliebig erweitern.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hallo ErfinderDesRades, RodFromGermany,

    die Datei sieht so aus:

    %_N kgkgkhkjh %kökl
    löklöklöl
    juzulklkj

    %_N kgkgkhkjh %kökl
    löklöklölssssss
    ssssssssss

    oder:

    %1_asdadsads
    sdsdsdsdsdsd

    %2_sadsadsdsd
    sdsdsfwewefdsdf


    ich will folgendes in einem Array stehe haben:

    %_N kgkgkhkjh %kökl
    löklöklöl
    juzulklkj

    %1_asdadsads
    sdsdsdsdsdsd

    ............. usw.
    Willst Du 2 Dateien iwie mergen?
    Da musst Du die Elemente halt einzeln zusammensetzen, dazu nutze eine List(Of String).
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Danke,

    das hat mich schonmal viel weiter gebracht.

    Mit:

    VB.NET-Quellcode

    1. Private Sub Button4_Click(sender As System.Object, e As System.EventArgs) Handles Button4.Click
    2. Dim Lines As String = System.IO.File.ReadAllText("H:\ARCs\asup.spf")
    3. Dim text() = Lines.Split({"%_N"}, StringSplitOptions.None)
    4. For i As Integer = 0 To text.Length() - 1
    5. MessageBox.Show("%_N" & text(i))
    6. Next
    7. End Sub

    komme ich schonmal weiter. Jetzt kann ich weiter experimentieren :D

    Ich Danke euch. :)
    Hallo erstamal,

    ich komme beim splitten leider nicht weiter
    ein Beispiel einer zu splittenden Datei:

    Spoiler anzeigen

    ™999999 (INITIALISATION)
    N010 R251:= Q4004- R58:2
    N020 R80:= 2*R251
    N190 BN210
    N200 M00 ( > 4000 T/MIN)
    N210 R80<
    N220 BN240
    N230 asdasdad
    N240 M17
    11 (*** M- **)
    N10 (MB05 )
    N10 ( BROCHE
    N10 (MC05 =)
    N10 ( MOLETTE SUP)
    "2 (TAILLAGE)
    N001 R59:= 1.0 (VALE)
    N130 R202:= R251+R19+R27
    N140 R522:=R202
    N150 ( MB05)
    N180 M17
    %3 (RECTIFIER PLAN-)
    N1 R2:= 30 (POINT)
    N1 R3:= 620 (POINT )
    N1 R6:=5000 (AVANCE X)
    N1 R39:= 200.0 (POINT DE RETOUR, = AR-)
    N80 $41 $21 Y
    N90 G39
    N110 BP
    N150 M30
    " (CD 470408)
    N001 (0.001 PAR TOUR DE MEULE)
    N001 R1:= 25.0 (POS.DE CHARGEMENT X)
    N002 G01
    N002 G01 XR1
    N003 B%2
    N004 R110=1 BN012
    N011 R48:=260.3
    G0408 (INF.)
    N5 G0 G90
    N110 G0 G53 ZR94-3- R92
    N425 ( M35 )
    N430 G99 T0000
    N440 B™999999
    N450 M17


    es soll immer nur wenn am Zeilenanfang %1 oder %2 oder %3 usw ... steht gesplittet werden.
    Innerhalb des Textes kommt das auch vor, aber mit einem B%1 oder B%2 usw.
    Da soll natürlich nicht gesplittet werden.

    Ich habe es mit diesem versucht:

    VB.NET-Quellcode

    1. Dim Lines As String = System.IO.File.ReadAllText("F:\Schleicher\test.PGM")
    2. Dim text() = Lines.Split({"%0", "%1", "%2", "%3", "%4", "%5", "%6", "%7", "%8", "%9 "}, StringSplitOptions.None)
    3. For i As Integer = 0 To text.Length() - 1
    4. MessageBox.Show("%" & text(i))
    5. Next

    da splittet er natürlich überall , auch da wo ein B%1... ist.

    Hab es auch schon mit:

    VB.NET-Quellcode

    1. Dim Lines() As String = System.IO.File.ReadAllLines("F:\Schleicher\test.PGM")

    probiert, da bekomme ich aber nach dem Splitten nur die Zeilen mit %1 usw heraus. ;(

    Weiß mir kein Rat mehr.
    Das nächste währe dann die nach dem Splitten rausgetretten %1 oder %2 an der richtigen Stelle wieder einsetzen.

    Oder gibt es da einen besseren und einfacheren Weg das alles zu realisieren ?

    Besten Dank im vorraus. :thumbsup:

    majachen99 schrieb:

    Weiß mir kein Rat mehr.
    Formuliere Dein Problem so, dass wir das verstehen, was Du meinst. :S
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    majachen99 schrieb:

    Meinst du Das ?
    Was Du meinst ist wichtig, denn hier in diesem Thread behandeln wir ja Dein Problem.
    Also ...
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    RegEx oder Split mit A%0 bis A%9, C%0 usw.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    majachen99 schrieb:

    wenn ich mit ReadAllLines einlese habe ich jede einzelne Zeile extra pro ArrayEintrag.
    "jede einzelne Zeile extra pro ArrayEintrag" ergibt keinen Sinn.

    Dann müßte ich die Zeilen in ein neues Array bis zum nächsten Zeilenanfang mit %1 usw. haben.
    Falsch, bzw. so missverständlich ungenau, dass die Umsetzung kaum was werden kann.

    post#2 hätte dich dazu bringen sollen, zunächst zu konzipieren, bevor du Code schreibst.
    Ich glaub, für viele ist am Konzipieren so schwierig, dass man so einfach denken muss. Die Frage
    Willst du die einzelnen Zeilen noch einmal jede splitten?
    ist doch nur mit ja oder nein zu beantworten.
    Weiteres ergäbe sich dann evtl. daraus.

    majachen99 schrieb:

    Sorry das wir aneinander vorbei reden.

    RodFromGermany schrieb:

    Formuliere Dein Problem so, dass wir das verstehen, was Du meinst.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Nur einmal splitten nach den genannten Kriterien (%1 oder %2 oder %3 usw ...bis %9).

    Mit diesem Quellcode funktioniert das auch:

    VB.NET-Quellcode

    1. Dim Lines As String = System.IO.File.ReadAllText("F:\Schleicher\test.PGM")
    2. Dim text() = Lines.Split({"%0", "%1", "%2", "%3", "%4", "%5", "%6", "%7", "%8", "%9 "}, StringSplitOptions.None)
    3. For i As Integer = 0 To text.Length() - 1
    4. MessageBox.Show("%" & text(i))
    5. Next

    Es wird bei diesem Quellcode aber auch bei (b%1 oder b%2 oder b%3 usw ...bis b%9) gesplittet.
    Das soll ausgeschlossen werden.

    Splitte den Text bei (%1 oder %2 oder %3 usw ...bis %9) aber nicht bei (b%1 oder b%2 oder b%3 usw ...bis b%9).

    Wie kann ich das machen?

    Hoffe jetzt ist alles klar :)

    majachen99 schrieb:

    Hoffe jetzt ist alles klar
    mir vmtl. mehr als dir. ;)

    Also ich rede ja immer von .ReadAllLines, während du ab post#6 auf das unglückselige .ReadAllText umgeschwenkt bist, was deinen Code zum Lügner macht:

    VB.NET-Quellcode

    1. Dim Lines As String = System.IO.File.ReadAllText("H:\ARCs\asup.spf")
    2. Dim text() = Lines.Split({"%_N"}, StringSplitOptions.None)
    "Lines" heißt: "Zeilen", aber tatsächlich sinds nicht viele Zeilen, sondern es ist ein String.
    "text" heißt: "Text", aber tatsächlich ists nicht ein zusammenhängender Text, sondern es sind viele Strings (aber keine Zeilen).

    Also würde ich sehr empfehlen, wieder auf den Stand von post#1 zurückzugehen, wo Lines noch Lines waren.

    Dein Split-Wunsch "Splitte den Text bei (%1 oder %2 oder %3 usw ...bis %9) aber nicht bei (b%1 oder b%2 oder b%3 usw ...bis b%9)." ist ähnlich unverständlich, denn wir haben die Datei ja nicht vorliegen, wo "b%1" und %1 drin vorkommt - also dass man sich mal Input und gewünschter Output mal angugge könnte.
    Weder post#1 noch post#4 machen ieine verständliche Aussage zu Input und gewünschtem Output.

    Es hängt alles daran, dass du nicht imstande bist, klare Fragen klar zu beantworten.


    Aber so allmählich kommt mir der Gedanke, dass du garnicht splitten willst, sondern nur die Zeilen (als ganze) anzeigen, die mit "%" anfangen.