VB.NET-Tipp 0117: CSV-Dateien lesen
von Dario
Beschreibung
CSV (Comma Seperated Values)-Dateien sind ein sehr gängiges Dateiformat, da sie sehr einfach und intutiv aufgebaut sind. Sie stellen eine Datentabelle dar, bei der die einzelnen Einträge durch Trennzeichen wie beispielsweise Kommata oder Semikola getrennt sind. Einträge, die selbst das Trennzeichen enthalten, müssen in Anführungszeichen gesetzt werden.
Solche Dateien sind mit der Split()-Funktion zwar einfach zu verarbeiten, doch ist diese oft ineffizient oder produziert Fehler, da sie in Anführungszeichen gesetzte Trennzeichen nicht berücksichtigen kann. Eine Alternative sind Reguläre Ausdrücke. Visual Basic bietet hierfür allerdings von Haus aus schon die TextFieldParser-Klasse an. Damit ist das Verarbeiten von CSV-Dateien ein Kinderspiel.
Schwierigkeitsgrad: | Framework-Version(en): .NET Framework 2.0, .NET Framework 3.0, .NET Framework 3.5 | .NET-Version(en): Visual Basic 2005, Visual Basic 2008 | Download: |
' Dieser Quellcode stammt von http://www.activevb.de ' und kann frei verwendet werden. Für eventuelle Schäden ' wird nicht gehaftet. ' Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum. ' Ansonsten viel Spaß und Erfolg mit diesem Source! ' Projektversion: Visual Studio 2008 ' Option Strict: An ' Option Explicit: An ' Option Infer: An ' ' Referenzen: ' - System ' - System.Data ' - System.Deployment ' - System.Drawing ' - System.Windows.Forms ' - System.Xml ' - System.Core ' - System.Xml.Linq ' - System.Data.DataSetExtensions ' ' Imports: ' - Microsoft.VisualBasic ' - System ' - System.Collections ' - System.Collections.Generic ' - System.Data ' - System.Drawing ' - System.Diagnostics ' - System.Windows.Forms ' - System.Linq ' - System.Xml.Linq ' ' ############################################################################## ' ################################# Form1.vb ################################### ' ############################################################################## Option Strict On Imports System.IO Imports Microsoft.VisualBasic.FileIO Public Class frmMain Private Sub Parse(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles cmdParse.Click ' Datenquelle generieren ' Hier wird ein Speicherstream verwendet - Der Parser funktioniert mit ' allen Streams, v.A. File-Streams Dim CsvBytes = System.Text.Encoding.UTF8.GetBytes(txtSource.Text) Dim CsvStream = New MemoryStream(CsvBytes) ' CSV-Parser erstellen - Hier wird als Datenquelle die Eingabe gesetzt ' Es kann genauso gut ein Dateiname oder ein anderer Stream ' gesetzt werden Using Parser = New FileIO.TextFieldParser(CsvStream) ' Parser einrichten With Parser ' Durch Zeichen getrennte Datensätze .TextFieldType = FieldType.Delimited ' Trennstrings setzen - Erwartet ein Array, hier wird nur ' eines verwendet .Delimiters = New String() {txtDelimiter.Text} ' Leerzeichen an den Datenelementen löschen .TrimWhiteSpace = True End With Dim Index = 0 ' Alle Datensätze durchgehen Do Until Parser.EndOfData Index += 1 ' Wenn eine Zeile falsch aufgebaut ist, kann hier der Fehler ' MalformedLineException auftreten. ' Aktuelle Datenzeile parsen - Dieser Aufruf ist Kernstück des ' ganzen Programms und gibt ein Array aus Strings zurück Dim Row = Parser.ReadFields ' Anzeigen Call lstItems.Items.Clear() For Each Item In Row Call lstItems.Items.Add(Item) Next lblRowNum.Text = Index.ToString If MessageBox.Show("Parsen fortsetzen?", "Weiter", _ MessageBoxButtons.YesNo, MessageBoxIcon.Question) = _ Windows.Forms.DialogResult.No Then Exit Do Loop End Using Call MessageBox.Show("Parsen abgeschlossen", "Fertig", _ MessageBoxButtons.OK, MessageBoxIcon.Information) Call CsvStream.Dispose() End Sub End Class
Ihre Meinung
Falls Sie Fragen zu diesem Artikel haben oder Ihre Erfahrung mit anderen Nutzern austauschen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.