Aus CSV.Datei lesen

  • VB.NET

Es gibt 21 Antworten in diesem Thema. Der letzte Beitrag () ist von xaverl.

    Aus CSV.Datei lesen

    Hallo,

    Ich habe folgendes Problem ich würde gerne eine CSV.Datei in ein DataGridView einlesen.
    Mein Quelltext lautet wie folgt:

    Dim
    fs As New FileStream("123.CSV", FileMode.Append)
    Dim sr As New StreamReader(fs)
    Dim Zeile As String
    Do Until sr.Peek() = -1
    Zeile = sr.ReadLine()
    DataGridView1.Text &= Zeile & vbCrLf
    Loop
    sr.Close()

    Leider funktioniert das nicht, beim Debuggen makiert er mir die 2.Zeile und gibt mir folgende Meldung:
    "Der Stream war nicht lesbar"


    Was kann ich tun?

    Vielen Dank
    xaverl
    auch dann geht das in die Hose.
    Eine DataGridView wird anders bestückt.
    Hier mal eine beispiel wie man eine CSV an ein DataGridView weitergibt.
    Spoiler anzeigen

    VB.NET-Quellcode

    1. ' DataGridView aus datei lesen und in Grid anzeigen
    2. Private Sub User_Load()
    3. If File.Exists(Datei) Then
    4. Dim lines() As String = Nothing
    5. DataGridView1.Rows.Clear()
    6. Me.Cursor = Cursors.AppStarting
    7. 'DataGridView1.AllowUserToAddRows = True
    8. Try
    9. lines = IO.File.ReadAllLines(Datei)
    10. Catch ex As Exception
    11. Me.Cursor = Cursors.Default
    12. Exit Sub
    13. End Try
    14. Dim Menge As Integer = lines.GetLength(Menge) - 1 ' Anzahl der Zeilen ermitteln
    15. For i = 0 To Menge
    16. Dim Eintrag As String = lines(i)
    17. Dim parts() As String = Split(Eintrag, "#")
    18. Dim RowCount As Integer = DataGridView1.RowCount - 1
    19. DataGridView1.Rows.Add()
    20. DataGridView1.BeginEdit(CBool(RowCount))
    21. Dim SplittCount As Integer = parts.Length - 1 ' Anzahl der Einträge in Splitt
    22. If SplittCount >= 0 Then
    23. For g = 0 To SplittCount
    24. DataGridView1.Rows(RowCount).Cells(g).Value = parts(g)
    25. Next g
    26. End If
    27. Next i
    28. DataGridView1.Update()
    29. DataGridView1.EndEdit()
    30. 'DataGridView1.AllowUserToAddRows = False
    31. Me.Cursor = Cursors.Default
    32. End If
    33. End Sub
    Du brauchst eigentlich nur 2 sachen beachten.

    ich Splitte in der CSV mit "#". also sollten deine auch mit "#" gesplittet sein. oder du änderst den wildcard.
    dann noch die Datei übergeben
    Also

    VB.NET-Quellcode

    1. Dim Datei as String = "Dein Pfad und DateiName"


    Wenn du nun eine DataGridView1 auf der Form hast sollte es laufen.
    Hallo ChaosBernd,

    die wildcard im diesen Fall "#" ist doch ein Platzhalter oder?
    und hat nichts mit dem in der CSV.Datei verwendeten Trennungszeichen Semikolon ";" zu tun oder?

    Wenn ich jetzt mit meiner Annahme richtig liege dann weiß ich nicht wie ich die wildcard ändern kann, wäre super wenn du mir da einen Tipp geben könntest.

    Gruß
    xaverl
    doch das meinte ich damit. Also die Trennzeichen in deiner CSV.
    Wenn du also ; in deiner CSV als Trennzeichen hast dann ändere nur den Code auf ";" ab.

    denk an deine Datei. Die solltest du auch dem Code mitgeben. hatte ich aber schon in dem obigen Post erwänt.
    Dann hab ich ein Problem
    "mein" Quelltext ist jetzt der selbe wie der von dir ;)

    VB.NET-Quellcode

    1. Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    2. Dim Datei As String = "C:\Users\Stefan\Desktop\123.CSV"
    3. If File.Exists(Datei) Then
    4. Dim lines() As String = Nothing
    5. DataGridView1.Rows.Clear()Me.Cursor = Cursors.AppStarting
    6. 'DataGridView1.AllowUserToAddRows = True
    7. Trylines = IO.File.ReadAllLines(Datei)
    8. Catch ex As ExceptionMe.Cursor = Cursors.Default
    9. Exit Sub
    10. End Try
    11. Dim Menge As Integer = lines.GetLength(Menge) - 1 ' Anzahl der Zeilen ermittelnFor i = 0 To Menge
    12. Dim Eintrag As String = lines(i)Dim parts() As String = Split(Eintrag, ";")Dim RowCount As Integer = DataGridView1.RowCount - 1
    13. DataGridView1.Rows.Add()
    14. DataGridView1.BeginEdit(CBool(RowCount))
    15. Dim SplittCount As Integer = parts.Length - 1 ' Anzahl der Einträge in Splitt
    16. If SplittCount >= 0 ThenFor g = 0 To SplittCount
    17. DataGridView1.Rows(RowCount).Cells(g).Value = parts(g)Next g
    18. End IfNext i
    19. DataGridView1.Update()
    20. DataGridView1.EndEdit()
    21. 'DataGridView1.AllowUserToAddRows = FalseMe.Cursor = Cursors.Default
    22. End If
    23. 'Tabelle beschriften
    24. Me.DataGridView1.Rows(0).Cells(0).Value = "Artikelnummer"
    25. Me.DataGridView1.Rows(0).Cells(1).Value = "Suchbezeichnung"
    26. Me.DataGridView1.Rows(0).Cells(2).Value = "Bezeichnung 2"
    27. Me.DataGridView1.Rows(0).Cells(3).Value = "Bezeichnung 3"
    28. Me.DataGridView1.Rows(0).Cells(4).Value = "EAN"
    29. Me.DataGridView1.Rows(0).Cells(5).Value = "Produkthauptgruppe O-Ringe"
    30. Me.DataGridView1.Rows(0).Cells(6).Value = "Produktuntergruppe"
    31. Me.DataGridView1.Rows(0).Cells(7).Value = "Aufschlag"
    32. Me.DataGridView1.Rows(0).Cells(8).Value = "WEF-Preis"
    33. Me.DataGridView1.Rows(0).Cells(9).Value = "WAF-Preis"
    34. Me.DataGridView1.Rows(0).Cells(10).Value = "Preiseinheit"
    35. Me.DataGridView1.Rows(0).Cells(11).Value = "EK-Liste"
    36. Me.DataGridView1.Rows(0).Cells(12).Value = "Verrechnungs-Preis"
    37. Me.DataGridView1.Rows(0).Cells(13).Value = "VK-Preis"
    38. Me.DataGridView1.Rows(0).Cells(14).Value = "VK-Liste"
    39. Me.DataGridView1.Rows(0).Cells(15).Value = "VK-Preisgruppenpreis"
    40. Me.DataGridView1.Rows(0).Cells(16).Value = "Aufschlagsart"
    41. Me.DataGridView1.Rows(0).Cells(17).Value = "Lagerbestand"
    42. Me.DataGridView1.Rows(0).Cells(18).Value = "Lagerwert"
    43. Me.DataGridView1.Rows(0).Cells(19).Value = "letzter Abgang"
    44. Me.DataGridView1.Rows(0).Cells(20).Value = "letzter Zugang"
    45. Me.DataGridView1.Rows(0).Cells(21).Value = "Mengeneinheit"
    46. Me.DataGridView1.Rows(0).Cells(22).Value = "SET-Artikel"
    47. Me.DataGridView1.Rows(0).Cells(23).Value = "Stücklisten-Artikel"
    48. Me.DataGridView1.Rows(0).Cells(24).Value = "Provision"
    49. Me.DataGridView1.Rows(0).Cells(25).Value = "Bestellartikel"
    50. Me.DataGridView1.Rows(0).Cells(26).Value = "Auslaufartikel"
    51. Me.DataGridView1.Rows(0).Cells(27).Value = "Sperren"
    52. Me.DataGridView1.Rows(0).Cells(28).Value = "Bewerten"
    53. Me.DataGridView1.Rows(0).Cells(29).Value = "Kassenartikel"
    54. Me.DataGridView1.Rows(0).Cells(30).Value = "eShop"
    55. Me.DataGridView1.Rows(0).Cells(31).Value = "eShop-Artikel seit"
    56. Me.DataGridView1.Rows(0).Cells(32).Value = "eShop Bild klein"
    57. Me.DataGridView1.Rows(0).Cells(33).Value = "eShop Bild groß"
    58. Me.DataGridView1.Rows(0).Cells(34).Value = "eShop Text"
    59. Me.DataGridView1.Rows(0).Cells(35).Value = "LKW-Typ"
    60. Me.DataGridView1.Rows(0).Cells(36).Value = "Werkstoff"
    61. Me.DataGridView1.Rows(0).Cells(37).Value = "Innendurchmesser" 'ab hier die Spalten die ich gerne hätte
    62. Me.DataGridView1.Rows(0).Cells(38).Value = "Aussendurchmesser"
    63. Me.DataGridView1.Rows(0).Cells(39).Value = "Schnur"
    64. Me.DataGridView1.Rows(0).Cells(40).Value = "Härte IRHD"
    65. Me.DataGridView1.Rows(0).Cells(41).Value = "Härte Shore"
    66. Me.DataGridView1.Rows(0).Cells(42).Value = "Dichte"
    67. Me.DataGridView1.Rows(0).Cells(43).Value = "Datum"
    68. Me.DataGridView1.Rows(0).Cells(44).Value = "Uhrzeit"
    69. Zeile = 1


    bis auf den Unterschied, dass ich die Spalten des DataGridView1 mit den Angaben aus meiner CSV beschrifte.
    Die Beschriftungen ab Zelle 37 sind dann Extra Beschriftungen, die ich dann Später mal von einer Messmaschine eintragen lassen will.

    Zur erklärung meines Vorhabens:
    Das einlesen der CSV.Datei soll den Sinn haben mir den Produktstamm aufzulisten, den ich dann durch die Artikelnummer anwählen kann.
    beispielsweise: DataGridView1.Colums(0;0).HeaderText = blabla
    Sobald du die Klammer nach Columns öffnest (Du hast Colums geschrieben statt Columns) siehst du die Möglichkeiten
    Bei mir steht keine dabei mit (0;0). Wo haste das denn her?
    Der Rest stimmt. Die Headertexte solltest du dir doch aus deiner CSV raus lesen können, falls dort welche drin sind!
    Hallo,

    ja ich habe die Überschriften in meiner CSV-Datei.
    Ich hab jetzt mal den Teil mit der Spaltenbeschriftung rausgenommen aus dem Quelltext, da dieser das einlesen anscheinend gestört hat. Seit ich den Teil rausgenommen habe fügt mir mein DataGridView die benötigten Zeilen ein, aber befüllt diese nicht. Jetzt wollt ich mal nachfragen ob dies daran liegen kann das ich in mein DataGridView noch weitere Spalten eingefügt habe und das Programm evtl. dadurch blockiert wird.

    Vielen Dank

    Ich hab es ausprobiert auch wenn ich die anderen Spalten rausnehme schreibt es mir keine Werte in die Felder. ?(

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