CSV Datei auslesen nach Datum und Uhr Zeit ab 2. Zeile

  • VB.NET

Es gibt 35 Antworten in diesem Thema. Der letzte Beitrag () ist von Kasi.

    CSV Datei auslesen nach Datum und Uhr Zeit ab 2. Zeile

    Hallo zusammen,

    kann jemanden helfen?
    Ich bin neu hier!
    ich möchte aus einem CSV Datei Inhalte nach Datum und Uhrzeit (von-bis) einlesen.
    Die Daten fängt ab 2. Zeile an und Trendzeichen(;).

    Danke,

    Ich habe das vorbereitet:

    Beispiel:

    VB.NET-Quellcode

    1. Imports System.IO
    2. Imports System.Text
    3. Public Class Form1
    4. Dim thedatatable As New DataTable
    5. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    6. ComboBox1.Enabled = False
    7. DateTimePicker1.Value = DateTime.Now.AddDays(-1)
    8. DataGridView1.Columns.Clear()
    9. DataGridView1.DataSource = Nothing
    10. DataGridView1.Rows.Clear()
    11. thedatatable.Rows.Clear()
    12. Label3.Text = ""
    13. Label4.Text = ""
    14. Label5.Text = ""
    15. With thedatatable
    16. .Columns.Add("Name", System.Type.GetType("System.String"))
    17. .Columns.Add("Date", System.Type.GetType("System.String"))
    18. .Columns.Add("Time", System.Type.GetType("System.String"))
    19. .Columns.Add("True/False", System.Type.GetType("System.String"))
    20. .Columns.Add("Eb1", System.Type.GetType("System.String"))
    21. .Columns.Add("Wil", System.Type.GetType("System.String"))
    22. .Columns.Add("Eb2", System.Type.GetType("System.String"))
    23. .Columns.Add("Wi2", System.Type.GetType("System.String"))
    24. .Columns.Add("Stat", System.Type.GetType("System.String"))
    25. .Columns.Add("Wi_s", System.Type.GetType("System.String"))
    26. End With
    27. End Sub
    28. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    29. Dim thereader As New IO.StreamReader("C:\DATA\test1111.csv", System.Text.Encoding.Default)
    30. Dim sline As String = ""
    31. Dim slines(20) As String
    32. Dim i As Integer = 1
    33. ''FilePathAndName = App.Path & "" & "log.txt"
    34. DataGridView1.Columns.Clear()
    35. DataGridView1.DataSource = Nothing
    36. DataGridView1.Rows.Clear()
    37. thedatatable.Rows.Clear()
    38. Label3.Text = ""
    39. Label4.Text = ""
    40. Label5.Text = ""
    41. Do Until thereader.Peek = -1
    42. sline = thereader.ReadLine()
    43. If sline Is Nothing Then Exit Do
    44. slines(i) = sline
    45. Dim thecolumns() As String = sline.Split(";")
    46. Dim NewRow As DataRow = thedatatable.NewRow
    47. NewRow("Name") = thecolumns(0)
    48. NewRow("Date") = thecolumns(1)
    49. NewRow("Time") = thecolumns(2)
    50. NewRow("True/False") = thecolumns(8)
    51. NewRow("Eb1") = thecolumns(4)
    52. NewRow("Wil") = thecolumns(5)
    53. NewRow("Eb2") = thecolumns(5)
    54. NewRow("Wi2") = thecolumns(6)
    55. NewRow("Stat") = thecolumns(7)
    56. NewRow("Wi_s") = thecolumns(3)
    57. thedatatable.Rows.Add(NewRow)
    58. Loop
    59. thereader.Close()
    60. '' ComboBox1.DataSource = thedatatable
    61. '' ComboBox1.DisplayMember = "a"
    62. DataGridView1.DataSource = thedatatable
    63. Me.Text = thedatatable.Rows.Count & "rows" ' Oben anzeige


    CodeTags gesetzt ~VaporiZed

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

    @Toni_Edi Willkommen im Forum. :thumbup:
    Kannst Du dazu noch ein paar Zeilen Deiner CSV posten?
    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!
    Willkommen im Forum.

    Bevor Du weitermachst, bitte die empfohlenen VS-Einstellungen verwenden, Stichwort Option Strict On (Zeile#56; Split akzeptiert in der Überladung keinen String -> .Split(";"c))

    Using-Block für den StreamReader verwenden, da dieser IDisposable implementiert.

    Wozu überhaupt ein StreamReader statt IO.File.ReadAllLines(Dateipfad).Skip(1)?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    @Toni_Edi Wenn Du Fragen zur Programmierung hast, stelle sie gefälligst im Forum und schreib keine PN.
    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,
    hier ist die Daten.

    Name;Date;Time;OK;Eb;Ebe1_x;Eb1_y;Eb_°;Eb_g;Eb_x;Eb_y;Eb_°;st_g;st_x;st_y;st_°;
    aal;25.10.2017;08:31:26;False;3,7;-30;36;162,7;17,8;2;8;220,5;20;-22;38;211,4;;;
    aal;25.10.2017;08:32:45;False;3,1;39;-131;29,3;50,1;2;-5;16,8;53,1;17;-56;17,5;;;
    AB;25.10.2017;08:36:52;False;3,1;39;-131;29,3;50,1;2;-5;16,8;53,1;17;-56;17,5;;;
    LR;25.10.2017;08:47:13;False;3,1;-95;-100;253,2;50;-8;0;316,8;51,5;-40;-38;313,7;;;
    LR;26.10.2017;08:50:18;False;6,5;5;72;134,2;26,7;11;11;174,8;32;15;69;167,2;;;
    CPLA;26.10.2017;10:09:05;False;0,7;-70;-89;337,2;3,8;-2;0;283,6;4,2;-58;-71;292,5;;;


    Vielen Danke,

    Toni_Edi schrieb:

    hallo,
    hier ist die Daten.


    wie würdest du denn versuchen zu filtern mit DateTime

    VB.NET-Quellcode

    1. 'dein Datum von Bis
    2. Dim fromDate As DateTime = New DateTime(2020, 1, 5, 10, 2, 22)
    3. Dim toDate As DateTime = New DateTime(2020, 3, 7, 12, 27, 45)


    du willst die erste Zeile überspringen..dann wirf die Suchmaschine an und schau nach "CSV+TXT + Skip(1)'

    VB.NET-Quellcode

    1. '....
    2. File.ReadAllLines("D:\TestFolder\testData2.csv").Skip(1)
    3. '....

    Kasi schrieb:

    du willst die erste Zeile überspringen..
    Das hat er nicht gesagt - Zumindest nicht hier im Thread.
    Wenn dem so wäre, wäre sein bisheriger Code zunächstmal funktionstüchtig, und eine winzige Änderung würde auch das erste-zeile-überspring-Problem lösen.

    (Ich bin aber generell immer nicht so dafür, so auf Ahnungen hin Probleme zu lösen, noch bevor der Thread-Ersteller selbst sie klar formuliert hat.
    Das führt schnell in alle Himmelsrichtungen.
    Und selbst wenn die vom TE gemeinte Richtung richtig erraten wurde, hat man ihn damit um die Chance gebracht, sein Problem zu formulieren. Das halte ich aber mit fürs wichtigste beim Programmieren: Dass man das zu lösende Problem klar und eindeutig formuliert)

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

    ups - übersehen - kann man so auffassen - auch wenner nicht sagt, dass das das Problem ist. Ich hätte es mir eher als Antwort auf post#2 vorgestellt.
    wie gesagt - das geeht auch mit minimal-invasiver Änderung seines Codes:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Imports System.IO
    2. Imports System.Text
    3. Public Class Form1
    4. Dim thedatatable As New DataTable
    5. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    6. ComboBox1.Enabled = False
    7. DateTimePicker1.Value = DateTime.Now.AddDays(-1)
    8. DataGridView1.Columns.Clear()
    9. DataGridView1.DataSource = Nothing
    10. DataGridView1.Rows.Clear()
    11. thedatatable.Rows.Clear()
    12. Label3.Text = ""
    13. Label4.Text = ""
    14. Label5.Text = ""
    15. With thedatatable
    16. .Columns.Add("Name", System.Type.GetType("System.String"))
    17. .Columns.Add("Date", System.Type.GetType("System.String"))
    18. .Columns.Add("Time", System.Type.GetType("System.String"))
    19. .Columns.Add("True/False", System.Type.GetType("System.String"))
    20. .Columns.Add("Eb1", System.Type.GetType("System.String"))
    21. .Columns.Add("Wil", System.Type.GetType("System.String"))
    22. .Columns.Add("Eb2", System.Type.GetType("System.String"))
    23. .Columns.Add("Wi2", System.Type.GetType("System.String"))
    24. .Columns.Add("Stat", System.Type.GetType("System.String"))
    25. .Columns.Add("Wi_s", System.Type.GetType("System.String"))
    26. End With
    27. End Sub
    28. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    29. Dim thereader As New IO.StreamReader("C:\DATA\test1111.csv", System.Text.Encoding.Default)
    30. Dim sline As String = ""
    31. Dim slines(20) As String
    32. Dim i As Integer = 1
    33. ''FilePathAndName = App.Path & "" & "log.txt"
    34. DataGridView1.Columns.Clear()
    35. DataGridView1.DataSource = Nothing
    36. DataGridView1.Rows.Clear()
    37. thedatatable.Rows.Clear()
    38. Label3.Text = ""
    39. Label4.Text = ""
    40. Label5.Text = ""
    41. if thereader.Peek > -1 then thereader.ReadLine() ' erste Zeile überspringen
    42. Do Until thereader.Peek = -1
    43. sline = thereader.ReadLine()
    44. If sline Is Nothing Then Exit Do
    45. slines(i) = sline
    46. Dim thecolumns() As String = sline.Split(";")
    47. Dim NewRow As DataRow = thedatatable.NewRow
    48. NewRow("Name") = thecolumns(0)
    49. NewRow("Date") = thecolumns(1)
    50. NewRow("Time") = thecolumns(2)
    51. NewRow("True/False") = thecolumns(8)
    52. NewRow("Eb1") = thecolumns(4)
    53. NewRow("Wil") = thecolumns(5)
    54. NewRow("Eb2") = thecolumns(5)
    55. NewRow("Wi2") = thecolumns(6)
    56. NewRow("Stat") = thecolumns(7)
    57. NewRow("Wi_s") = thecolumns(3)
    58. thedatatable.Rows.Add(NewRow)
    59. Loop
    60. thereader.Close()
    61. '' ComboBox1.DataSource = thedatatable
    62. '' ComboBox1.DisplayMember = "a"
    63. DataGridView1.DataSource = thedatatable
    64. Me.Text = thedatatable.Rows.Count & "rows" ' Oben anzeige

    Guten Abend zusammen,

    vielen dank zuerst Mal an alle die antwortet haben.
    ich bin hier neu!

    bei mir ist noch nicht klar.

    Skip(1) hat nicht funktioniert.

    welche Stelle muss das schreiben?
    was muss ich noch verändern?
    ganz Oben habe ich mein Code.


    danke für die weitere Hilfe
    wie gesagt: in post#10 habich genau dein code aus post#1 genommen und minimal modifiziert.
    Es wäre also vielleicht eine gute Idee, das mal anzugucken. Dazu auf "Spoiler anzeigen" klicksen.
    Kasi's Weg ist etwas eleganter, aber ist halt ein etwas annerer Weg, als was du eingeschlagen hast. Und würde somit etwas Mühe machen, etwas neues zu erlernen. Was mittelfristig natürlich enorm fruchtbar wäre, nur kurzfristig die Mühe - puh!

    Das im Grunde Wichtigste hat Vaporized gepostet - nämlich man kann an deinem Code erkennen, dass du dein VisualStudio so eingestellt hast, dass du objektorientiertes Programmieren so leider garnet erlernen kannst.
    Guten Abend Erfinderdesrades,

    ich bin kein Programmiere wie Ihr, als hobby.


    WOW it's working!
    super !

    Ich bin hier neu, Erste Fall wurde gelöst.
    i am soooooooooooooo Happyyyyyyyyyyyyyyyyyyyyyyyyyy.

    Ich kann von euch viel lernen, warum bin ich nicht früher hier angemeldet.
    vielen Danke,
    Hi,

    ich möchte hier auch der erste Zeile überspringen und in ComboBox1.Items.Add doppelte Name Aviod.
    Darf nur einmal eine Name aufgelistet werden.
    ich hoffe kann jeder mich verstehen (-_-).

    danke,



    Private Sub CheckBox1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox1.CheckedChanged

    If CheckBox1.CheckState = 1 Then

    Me.ComboBox1.Items.Clear()
    ComboBox1.Enabled = True

    Dim agentlistpath As String = "C:\DATA\test1111.csv"
    If File.Exists(agentlistpath) Then
    Using sr As New StreamReader(agentlistpath)
    While Not sr.EndOfStream

    Dim lineText As String() = sr.ReadLine().Split(";"c)
    ComboBox1.Items.Add(lineText.FirstOrDefault)

    End While
    End Using
    Else

    End If

    End If

    end sub

    Toni_Edi schrieb:



    bei mir ist noch nicht klar.
    Skip(1) hat nicht funktioniert.



    wie EDR in Post#12 sagte.... es ist ein anderer Weg..

    hier ein paar Bsp. aus MS Doku's
    docs.microsoft.com/de-de/dotne…s-in-a-csv-text-file-linq

    dort kannst du auch sehen wie Skip verwendet wird, ist vielleicht zuviel Info für einen Anfänger
    aber Lesen bildet
    Öhm, dürfte ich nochmal ganz dezent auf Post#4 verweisen, indem nicht nur Skip, sondern auch IO.File.ReadAllLines statt des StreamReaders verwendet wird?

    @Toni_Edi: Bitte CodeTags auf Deinen Post14 anwenden und für zukünftige Posts verwenden.

    Bzgl. Deinem

    Toni_Edi schrieb:

    doppelte Name Aviod
    vermute ich, dass Du doppelte Einträge vermeiden willst. Schreibe dazu die Daten nicht sofort in die ComboBox, sondern sammle sie erst in einer List(Of String). Dann kannst Du die Einträge dieser List per Distinct und ComboBox.AddRange in die ComboBox bringen, also

    VB.NET-Quellcode

    1. ComboBox1.AddRange(DeineListe.Distinct.ToArray)

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    Toni_Edi schrieb:

    i am soooooooooooooo Happyyyyyyyyyyyyyyyyyyyyyyyyyy.
    Das ist doch ein guter Grund, auf den Hilfreich-Button des Posts vom @ErfinderDesRades zu klicken. 8o
    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!
    Das war aus dem Kopf heraus. ComboBox.Items.AddRange(…) ist richtig.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.