Benötige Hilfe beim zerlegen eines Strings

  • VB.NET

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von link_275.

    Benötige Hilfe beim zerlegen eines Strings

    Hallo,

    ich benötige mal hilfe beim zerlegen eines Strings, genauer gesagt brauch ich einen bestimmten Teil.

    Ich habe eine Datei, welche ich Zeilenweise in eine Arraylist einlese.

    Die Datei hat beispielsweise folgenden aufbau (sind nur ein paar Beispielzeilen):

    Quellcode

    1. rem Programm:Paint.Net 3.5.8
    2. <cmd>copy "<template>Paint.Net\Paint.NET.3.5.8.Install.exe" <clienttemp>
    3. <psexec> -realtime -i "<clienttemp>Paint.NET.3.5.8.Install.exe" /auto CHECKFORUPDATES=0
    4. rem Programm:Adobe Reader 10.0.1
    5. <cmd>copy "<template>AdobeReader\adobereader.exe" <clienttemp>
    6. <cmd>copy "<template>AdobeReader\adobe-registry.cmd" <clienttemp>
    7. <cmd>copy "<template>AdobeReader\adobe-update.cmd" <clienttemp>
    8. <psexec> -realtime -i "<clienttemp>adobereader.exe" /sALL /norestart
    9. <psexec> -realtime -i "<clienttemp>adobe-registry.cmd"
    10. <psexec> -realtime -i "<clienttemp>adobe-update.cmd"


    Ich benötige genauer genommen den Namen der .cmd und .exe. Es könnte auch eine .msi sein.

    Kann mir bitte jemand helfen, irgendwie habe ich keine Idee mehr wie ich es noch noch machen könnte.

    Vielen Dank

    MarkOH
    ahoi,

    ich bin mir dabei gerade nicht sicher ob es die eleganteste lösung ist aber du könntest das eventuell mit RegEx lösen ...

    sozusagen fragst du durch ob die zeile etwas mit . und dannach 3 zeichen + " enthält wenn ja dann könntest du dir alles ausgeben lassen was zwischen dem . und > steht
    Grüße Manu

    Was Gott dem Menschen erspart hat, kann der Computer.
    Billy ©, (*1932), Schweizer Aphoristiker
    Quelle: www.Aphorismen.de
    Wird glaube ich so nicht funktionieren, wegen diesem da: Paint.NET.3.5.8.Install.exe

    mit string.contains(".exe") würde ich ja schonmal alle richtigen Zeilen ansprechen können, jetzt brauch ich halt irgendwas was mir den Ausdruck nach links bis zu einem bestimmten Zeichen ausgibt also bis zu einem \ oder >. Vielleicht über die ermittlung der länge von .exe nach links bis zum \ oder >.
    Ich bekomm es nur einfach nicht umgesetzt, irgendwo fehlt mir da noch etwas.
    Die Lösung: marius-gerum.de/shares/vbp/tmp_test.rar

    Spoiler anzeigen

    Code:

    VB.NET-Quellcode

    1. Imports System.Text.RegularExpressions
    2. Public Class Form1
    3. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    4. ListBox1.Items.Clear()
    5. GetExpr(RichTextBox1.Text, TextBox1.Text)
    6. End Sub
    7. Sub GetExpr(ByVal src As String, ByVal pattern As String)
    8. Dim res As New List(Of String)
    9. Dim MC As MatchCollection = Regex.Matches(src, pattern, RegexOptions.IgnoreCase)
    10. Dim c As String = ""
    11. For i As Integer = 0 To MC.Count - 1
    12. If res.Contains(MC(i).Value) = False Then
    13. c = MC(i).Value.ToString
    14. ListBox1.Items.Add(c)
    15. End If
    16. Next
    17. End Sub
    18. Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
    19. TextBox1.Text = "[^\""\*\/\:><\?\\\[\]]+\.(exe|cmd)"
    20. End Sub
    21. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    22. Try
    23. Dim ep As Match = Regex.Match("", TextBox1.Text, RegexOptions.IgnoreCase)
    24. MessageBox.Show("Ausdruck in Ordnung", "Hinweis", MessageBoxButtons.OK)
    25. Catch ex As Exception
    26. MessageBox.Show("Fehler im Ausdruck:" & vbNewLine & vbNewLine & ex.Message, "Hinweis", MessageBoxButtons.OK)
    27. End Try
    28. End Sub
    29. End Class




    link_275
    Hello World
    Oh klasse Link,

    habs mal in einen Test reingebaut und baus jetzt mal in mein Projekt. Danach muss ich mir dann nochmal dein Tut anschauen und den Reg.Ausdruck Stück für Stück auseinander nehmen um zu verstehen, wie er was macht, wills ja schließlich auch verstehen.

    Nochmal vielen lieben Dank

    MarkOH
    Kann Ich dir gerne erklären:

    [^\"\*\/\:><\?\\\[\]]+\.(exe|cmd)

    In VB musst du natürlich statt \" dann \"" schreiben, wegen den Anführungszeichen.

    Zwischen diesem [^ und ] stehen zeichen, die NICHT vorkommen dürfen, das sind die Zeichen die in Dateinamen nicht erlaubt sind.
    Dahinter ein "+", welches bedeutet, dass der vorangegangene Ausdruck (nur gültige Zeichen für Dateinamen) weitergeht. Aber nur bis ein Punkt kommt, also \.

    Der Punkt wird mit "\" escaped, das heißt es wird nach Punkt als Zeichen gesucht. Ein Punkt als regulärer Ausdruck bedeutet ja ein beliebiges Zeichen, du suchst aber wirklich den Punkt. Und nach dem Punkt soll dann noch entweder "cmd" ODER "exe" stehen. Das zusammen in den Klammern, mit dem Pipe Zeichen getrennt, das Pipe Zeichen stellt das "ODER" dar.

    Zusammengefasst von links nach rechts: Du suchst nach Zeichen die gültig sind für Dateinamen (es dürfen nur Nicht-Ungültige Zeichen folgen) bis zum Punkt, danach muss entweder "cmd" oder "exe" kommen :)




    link_275
    Hello World