vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
vb@rchiv Offline-Reader - exklusiv auf der vb@rchiv CD Vol.4  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Fortgeschrittene
Re: CSV - Datei richtig parsen ? 
Autor: rub
Datum: 11.07.07 17:41

So,
Imports System.IO
...
 
    Public Sub ParseIt(ByVal SourcePath As String, ByVal DestPath As String, _
      ByVal Delimiter As String)
        Try
            'Einlesen der Datei
            Dim curFielStream As FileStream
            Dim curBinaryReader As BinaryReader
            curFielStream = System.IO.File.Open(SourcePath, FileMode.Open, _
              FileAccess.ReadWrite, FileShare.None)
            curBinaryReader = New BinaryReader(curFielStream)
            Dim curByte As Byte() = curBinaryReader.ReadBytes( _
              curFielStream.Length)
            Dim curString As String = System.Text.Encoding.Default.GetString( _
            curByte)
            curFielStream.Close()
 
            Dim TempFileString As String = ""
 
            'Replace, für das Erstellen der Rows. 
            curString = curString.Replace(vbLf, vbCrLf)
 
            'Splitte Rows
            Dim splittedString() As String
            splittedString = curString.Split(vbCrLf)
 
            For i As Integer = 0 To splittedString.Length - 1
                Dim testStr As String = splittedString(i)
                'Replace, da sonst unnötige Zeilenumbrüche angelegt werden 
                ' könnten.
                testStr = testStr.Replace(vbCrLf, "")
                testStr = testStr.Replace(vbLf, "")
 
                Dim InnerStringIsOpen As Boolean = False
                Dim LineString As String = ""
 
                For ii As Integer = 0 To testStr.Length - 1
                    If Not testStr.Substring(ii, 1) = vbCrLf Then
                        If testStr.Substring(ii, 1) = Delimiter And _
                          InnerStringIsOpen = True Then
                            'Trennzeichen, die jedoch als Text behandelt werden 
                            ' sollen werden replaced.
                            LineString += "ý"
                        Else
                            'Nicht Wahr, wenn der Cursor am Ende des Files ist.
                            If ii <= testStr.Length - 2 Then
                                If InnerStringIsOpen = True And _
                                  testStr.Substring(ii, 2) = Chr(34) & Chr(34) _
                                  Then
                                    'Hochkommata, die im Text als Zeichen 
                                    ' vorkommen sollen werden replaced.
                                    LineString += "ð"
                                    ii += 1
                                Else
                                    If testStr.Substring(ii, 1) = Chr(34) Then
                                        If InnerStringIsOpen = False Then
                                            InnerStringIsOpen = True
                                        Else
                                            InnerStringIsOpen = False
                                        End If
                                    Else
                                        LineString += testStr.Substring(ii, 1)
                                    End If
                                End If
                            Else
                                If testStr.Substring(ii, 1) = Chr(34) Then
                                    If InnerStringIsOpen = True Then
                                        InnerStringIsOpen = False
                                    End If
                                Else
                                    LineString += testStr.Substring(ii, 1)
                                End If
                            End If
                        End If
                    End If
                Next
 
                TempFileString += LineString & Environment.NewLine
 
                'Achtung !! Hier ggf. Parsen
                'Achtung !! Hier ggf. das Trennzeichen z.B. ';' durch vbTab 
                ' ersetzten.
 
                'Das Zeichen wird wieder in den Kontext eingefügt.
                TempFileString = TempFileString.Replace("ý", Delimiter)
                'Hochkommata, die im Text vorkommen sollen werden wieder 
                ' eingefügt.
                '!! Achtung je nach dem ggf. 'chr(34) & chr(34) einsetzen. ( _
                  Wenn das File (z.B. CVS-Datei) z.B. erneut in Excel geöffnet _
                  werden soll, damit die Columns wieder stimmen.)
                TempFileString = TempFileString.Replace("ð", Chr(34))
            Next
 
            Dim curFielStream1 As System.IO.FileStream = System.IO.File.Open( _
              DestPath, System.IO.FileMode.OpenOrCreate, _
              System.IO.FileAccess.ReadWrite, System.IO.FileShare.None)
            Try
                Dim data() As Byte = System.Text.Encoding.Default.GetBytes( _
                  TempFileString)
                curFielStream1.Write(data, 0, data.Length)
            Catch ex As Exception
                MsgBox(ex.Message)
            Finally
                curFielStream1.Close()
            End Try
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
    End Sub
Für jeden, ders brauchen kann.

PS: Ich habe hier Unicode Zeichen eingebaut. Ggf. muss das Projekt angepasst werden.
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
CSV - Datei richtig parsen ?1.144rub11.07.07 12:12
Re: CSV - Datei richtig parsen ?736Maywood11.07.07 16:46
Re: CSV - Datei richtig parsen ?699rub11.07.07 16:57
Re: CSV - Datei richtig parsen ?819rub11.07.07 17:41

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel