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. |