Zeichenkette zerlegen und in DataGridView einfügen

  • VB.NET

Es gibt 22 Antworten in diesem Thema. Der letzte Beitrag () ist von Hicki.

    Zeichenkette zerlegen und in DataGridView einfügen

    Hi,

    ich habe eine Zeichenkette zB. <b:1965-08-21,Andreas,Testermann> die zerlegt werden muss.

    Die zerlegten Daten sollen in eine DataGridView mit den Spalten <Vorname> <Nachname> <Tag> <Monat> <Jahr> eingefügt werden.

    Wie stelle ich das an?



    Gruß Andreas
    Du kannst z.B. erstmal nach "," splitten, und dann die Einträge seperat weiterverarbeiten.

    Als Denkansatz:

    VB.NET-Quellcode

    1. Dim s As String = "<b:1965-08-21,Andreas,Testermann>"
    2. Dim arr() As String = s.Split(","c)
    3. Dim Datum As String = arr(0)
    4. Dim Vorname As String = arr(1)
    5. Dim Nachname As String = arr(2)
    Das c bedeutet, dass es sich dabei um einen Char handelt.

    "," -> Ein String von der Länge 1
    ","c -> Ein Char

    Das ist eine Möglichkeit dem Wert einen Datentypen zuzuweisen, schimpft sich Postfix:

    VB.NET-Quellcode

    1. Dim d As Decimal = 123D
    2. Dim s As Short = 123S
    3. Dim f As Single = 123.0F
    4. Dim l As Long = 123L
    Ich weiß nicht obs besser ist das Datum als Date statt als String abzuspeichern deswegen hab ichs mal so gemacht:

    VB.NET-Quellcode

    1. Dim Test As String = "<b:1965-08-21,Andreas,Testermann>"
    2. Dim arr() As String = Test.Split(New Char(), ","c)
    3. Dim datum As Date = Date.Parse(arr(0).Split(New Char(), ":"c)(1))
    4. Dim Vorname As String = arr(1)
    5. Dim Nachname As String = arr(2).Remove(arr(2).Length - 1, 1)
    6. MessageBox.Show(Vorname)
    7. MessageBox.Show(Nachname)
    8. MessageBox.Show(datum.ToString("yyyy-MM-dd"))
    Dann hast du den Split()-Befehl nicht begriffen.

    Split() teilt einen String, indem es den String bei jedem Vorkommen des übergebenen Zeichens "kappt" und in ein Array schreibt.

    Wenn du beispielsweise einen String in Richtung "101110110111" hättest und Split() den Char der 0 übergibst:

    VB.NET-Quellcode

    1. .Split("0"c)


    würdest du diesen speziellen String in ein Array teilen, das bei
    Index 0 = "1"
    Index 1 = "111"
    Index 2 = "11"
    Index 3 = "111"

    beinhaltet.

    Letztendlich heißt das, dass du das Datum wiederum über Split("-"c) teilen kannst.
    Schau Dir mal ein Objekt vom Typ DateTime an. Das liefert Dir jede Information, die Du haben willst. Hier nochmal etwas zu splitten macht keinen Sinn.
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o

    lordknoblauch schrieb:

    Dann hast du den Split()-Befehl nicht begriffen.




    Ich habe das schon verstanden. Hatte ein paar Startschwierigkeiten.

    So habe ich es jetzt gelöst.


    VB.NET-Quellcode

    1. Dim a As String = "b:1965-08-21,Andreas,Testermann"
    2. Dim Kommando() As String = a.Split(":"c)
    3. Dim lösch2 As String = Kommando(1)
    4. Dim b As String = Kommando(1)
    5. Dim Datum() As String = b.Split("-"c)
    6. Dim Jahr As String = Datum(0)
    7. Dim Monat As String = Datum(1)
    8. Dim Tag As String = Datum(2)
    9. Dim c As String = Datum(2)
    10. Dim Vor_Nachname() As String = c.Split(","c)
    11. MessageBox.Show(Datum(0)) 'Jahr
    12. MessageBox.Show(Datum(1)) 'Monat
    13. MessageBox.Show(Vor_Nachname(0)) 'Tag
    14. MessageBox.Show(Vor_Nachname(1)) 'Vorname
    15. MessageBox.Show(Vor_Nachname(2)) 'Nachname


    Gruß Andreas

    Hicki schrieb:

    So habe ich es jetzt gelöst.
    Split ist noch sehr viel mächtiger:

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    2. Dim a As String = "b:1965-08-21,Andreas,Testermann"
    3. Dim Kommando() As String = a.Split({":"c, ","c})
    4. End Sub
    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!

    Hicki schrieb:

    Dein Hinweis
    bezog sich auf das führende "b:", was Du so separierst, ":" und "," gleichzeitig.
    Das Datum würde ich extra behandeln, entweder dann noch mal splitten oder mit DateTime.ParseExact(...).
    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!
    Warum wird meine Antwort oben ignoriert? Habs nochmal mit Date.parseexact:

    VB.NET-Quellcode

    1. Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    2. Dim Test As String = "<b:1965-08-21,Andreas,Testermann>"
    3. Dim Person() As String = {Test.Split(New Char(), ","c)(1), Test.Split(New Char(), ","c)(2).Split(New Char(), ">"c)(0), (Test.Split(New Char(), ","c)(0).Split(New Char(), ":"c)(1))}
    4. Dim Datum As Date = Date.ParseExact(Person(2), "yyyy-MM-dd", CultureInfo.InvariantCulture)
    5. MessageBox.Show(Person(0))
    6. MessageBox.Show(Person(1))
    7. MessageBox.Show(Datum.ToString("yyyy-MM-dd"))
    8. End Sub


    Das hier als Import:

    VB.NET-Quellcode

    1. Imports System.Globalization


    Wenn du noch das Jahr etc herausfiltern willst;

    VB.NET-Quellcode

    1. Dim Test As String = "<b:1965-08-21,Andreas,Testermann>"
    2. Dim Person() As String = {Test.Split(New Char(), ","c)(1), Test.Split(New Char(), ","c)(2).Split(New Char(), ">"c)(0), (Test.Split(New Char(), ","c)(0).Split(New Char(), ":"c)(1))}
    3. Dim Datum As Date = Date.ParseExact(Person(2), "yyyy-MM-dd", CultureInfo.InvariantCulture)
    4. Dim Jahr, Monat, Tag As Integer
    5. Jahr = Datum.Year
    6. Monat = Datum.Month
    7. Tag = Datum.Day
    8. MessageBox.Show(Tag.ToString)
    9. MessageBox.Show(Monat.ToString)
    10. MessageBox.Show(Jahr.ToString)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „RushDen“ ()

    RushDen schrieb:

    VB.NET-Quellcode

    1. Dim Person() As String = {Test.Split(New Char(), ","c)(1), Test.Split(New Char(), ","c)(2).Split(New Char(), ">"c)(0), (Test.Split(New Char(), ","c)(0).Split(New Char(), ":"c)(1))}
    Was soll das?
    Sieh Dir mal das an:

    VB.NET-Quellcode

    1. Dim Kommando() As String = a.Split({":"c, ","c})
    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!

    VB.NET-Quellcode

    1. Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    2. Dim Test As String = "<b:1965-08-21,Andreas,Testermann>"
    3. Dim Person() As String = Test.Split({","c, ":"c, ">"c})
    4. Dim Datum As Date = Date.ParseExact(Person(1), "yyyy-MM-dd", CultureInfo.InvariantCulture)
    5. Dim Jahr, Monat, Tag As Integer
    6. Dim Vorname, Nachname As String
    7. Jahr = Datum.Year
    8. Monat = Datum.Month
    9. Tag = Datum.Day
    10. Vorname = Person(2)
    11. Nachname = Person(3)
    12. MessageBox.Show(String.Format("{0} ist mein Vorname und {1} mein Nachname. Ich bin geboren am {2:00}. {3:00}. {4}", Vorname, Nachname, Tag, Monat, Jahr))
    13. End Sub


    so besser?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „RushDen“ ()

    @Eierlein:: Unsere Intention war, das Datum (zunächst) zusammen zu lassen, weil DateTime.Parse & Co. besser ist.
    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!