Visual Basic Programm Optimierung
Benutze StreamReader zum durchlesen einer Datei aber das Programm stürzt wenn die Datei zu gross ist... Gibt es einen bessere Lösung?
Hallo zusammen!!! Bevor ich schlaffen gehe wollte ich euren Rat... Ich habe ein ganz einfaches Programm erstellt. Das hier -->
Ich öffne mit einem OpenfileDialog eine Textdatei und mit einem Reader durchlese ich die Datei. Mein Ziel ist es alle kommas die sich im inneren von '' " befinden mit Punkt zu ersetzen... zum beispiel -->
2,3,''Nudeln 3,4 x 2" --> Es soll so werden --> 2,3,Nudeln 3.4 x 2
Es ist eben comma delimited Text... Und bei der Artkelbezeichnung benutzt ein Typ immer Kommas... So kann ich aber die Datei nicht in meinem Sql Server importieren... Ich muss sie immer korrigieren...
Damit ich beide '' finden kann muss ich jeden einzelnen Character durchlesen...
Es klappt aber nur bei kleinen Textdateien... Als ich eine 2 Mb Datei ändern wollte ist das Programm einfach abgestürzt... Zuviel Speicherverbrauch...Hat da jemand eine Idee wie ich dieses Programm Optimieren kann???
Vielen Dank im Voraus !!!!!!!!!!!!!!..
Praktikantin
Hallo zusammen!!! Bevor ich schlaffen gehe wollte ich euren Rat... Ich habe ein ganz einfaches Programm erstellt. Das hier -->
System.IO
Imports System.Collections
Imports System.Text
Imports System.Text.RegularExpressions
Public Class Form1
'-- code behind the main form
'-- Declare Private Members
Private fName As String
Private txt As String
Private NewText As String
Private Sub btnOpen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOpen.Click
'-- Open the CSV file using the Open File Dialog.
OpenCSVFile()
'-- Read from the CSV file
ReadFromFile()
'-- Write and Save Modified file
WriteModifiedCSVFile()
End Sub
Private Sub OpenCSVFile()
If OpenFileDialog1.ShowDialog = (Windows.Forms.DialogResult.OK) Then
Try
'-- Open the file
fName = OpenFileDialog1.FileName
Catch ex As IOException
MessageBox.Show("Couldn't open the file")
End Try
End If
End Sub
Private Sub ReadFromFile()
'-- Open file and launch StreamReader
Dim reader As StreamReader
'-- Read all text to the end.
Dim iBuffer As Integer, readBuffer As String, readLine As String
readLine = ""
Dim MsgIdentity As String = ""
''''' Dim regX As New Regex("\,") '<-- Will m
' ''<-- Replace all comma (,) characters with dot (.) character.
If fName <> "" Then
reader = New StreamReader(New FileStream(fName, FileMode.Open))
iBuffer = reader.Read
While iBuffer > 0
readBuffer = ChrW(iBuffer)
If readBuffer <> """" Then
readLine += readBuffer
Else
'' If readLine.Substring(0, 1) = """" Then
MsgIdentity += readBuffer
Do
iBuffer = reader.Read
readBuffer = ChrW(iBuffer)
'readBuffer = Chr(iBuffer)
MsgIdentity += readBuffer
Loop Until readBuffer = """"
'''' regX.Replace(MsgIdentity, ".")
readLine += Replace(Replace(MsgIdentity, ",", "."), """", "")
MsgIdentity = ""
End If
''readLine = ""
iBuffer = reader.Read
End While
End If
reader.Close()
NewText = ReplaceQuotations(readLine)
End Sub
Private Function ReplaceCommas(ByVal text As String) As String
'-- Declare local variable
Dim regX As New Regex("\,") '<-- Will m
'<-- Replace all comma (,) characters with dot (.) character.
Return regX.Replace(text, ".")
End Function
Private Function ReplaceQuotations(ByVal text As String) As String
'-- Declare local variable
Dim regX As New Regex("\""")
'<-- Replace all comma (,) characters with dot (.) character.
Return regX.Replace(text, "")
End Function
Private Function ReplaceNumber9_1(ByVal text As String) As String
'-- Declare local variable
'-- Declare local variable
Dim regX As New Regex("9,1")
'<-- Replace all (9,1) with (9.1).
Return regX.Replace(text, "9.1")
End Function
Private Sub WriteModifiedCSVFile()
'-- Write the passed text in the specified file
'-- and create the new file.
Dim writer As StreamWriter = File.CreateText(fName)
'-- Write text to sream
writer.Write(NewText)
'-- Close the stream
writer.Close()
End Sub
Private Sub btnOpen_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOpen.Click
End Sub
Private Sub OpenFileDialog1_FileOk(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles OpenFileDialog1.FileOk
End Sub
End Class
Ich öffne mit einem OpenfileDialog eine Textdatei und mit einem Reader durchlese ich die Datei. Mein Ziel ist es alle kommas die sich im inneren von '' " befinden mit Punkt zu ersetzen... zum beispiel -->
2,3,''Nudeln 3,4 x 2" --> Es soll so werden --> 2,3,Nudeln 3.4 x 2
Es ist eben comma delimited Text... Und bei der Artkelbezeichnung benutzt ein Typ immer Kommas... So kann ich aber die Datei nicht in meinem Sql Server importieren... Ich muss sie immer korrigieren...
Damit ich beide '' finden kann muss ich jeden einzelnen Character durchlesen...
Private Sub ReadFromFile()
'-- Open file and launch StreamReader
Dim reader As StreamReader
'-- Read all text to the end.
Dim iBuffer As Integer, readBuffer As String, readLine As String
readLine = ""
Dim MsgIdentity As String = ""
''''' Dim regX As New Regex("\,") '<-- Will m
' ''<-- Replace all comma (,) characters with dot (.) character.
If fName <> "" Then
reader = New StreamReader(New FileStream(fName, FileMode.Open))
iBuffer = reader.Read
While iBuffer > 0
readBuffer = ChrW(iBuffer)
If readBuffer <> """" Then
readLine += readBuffer
Else
'' If readLine.Substring(0, 1) = """" Then
MsgIdentity += readBuffer
Do
iBuffer = reader.Read
readBuffer = ChrW(iBuffer)
'readBuffer = Chr(iBuffer)
MsgIdentity += readBuffer
Loop Until readBuffer = """"
'''' regX.Replace(MsgIdentity, ".")
readLine += Replace(Replace(MsgIdentity, ",", "."), """", "")
MsgIdentity = ""
End If
''readLine = ""
iBuffer = reader.Read
End While
End If
reader.Close()
NewText = ReplaceQuotations(readLine)
End Sub
Es klappt aber nur bei kleinen Textdateien... Als ich eine 2 Mb Datei ändern wollte ist das Programm einfach abgestürzt... Zuviel Speicherverbrauch...Hat da jemand eine Idee wie ich dieses Programm Optimieren kann???
Vielen Dank im Voraus !!!!!!!!!!!!!!..
Praktikantin
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 128910
Url: https://administrator.de/contentid/128910
Ausgedruckt am: 23.11.2024 um 02:11 Uhr
8 Kommentare
Neuester Kommentar
Hallo Praktikantin,
wenn deine Dateien immer nach dem Muster:
aufgebaut sind, dann hilft dir vielleicht dieser Script in VBS etwas:
Die Pfadangaben müssen von dir noch angepasst werden:
In meinem Script wird die Originaldatei nicht überschrieben. Teste erst einmal.
Gruß
Tsuki
wenn deine Dateien immer nach dem Muster:
2,3,''Nudeln 3,4 x 2" --> Es soll so werden --> 2,3,Nudeln 3.4 x 2
aufgebaut sind, dann hilft dir vielleicht dieser Script in VBS etwas:
Dim MyFile, MeineCSVDatei, MeineCSVDAteiNew
Dim TextNeuA, TextNeuB
Dim TextLineNew
MeineCSVDatei = "C:\Test.txt"
MeineCSVDAteiNew = "C:\Test.txt.csv"
Set FSO = CreateObject("Scripting.FileSystemObject")
SET MyFileNeu = FSO.CreateTextFile(MeineCSVDAteiNew, True)
MyFileNeu.Close
Set MyFile = FSO.OpenTextFile(MeineCSVDatei, 1)
SET MyFileNeu = FSO.OpenTextFile(MeineCSVDAteiNew, 8)
Do Until MyFile.AtEndOfStream
MeineDatei = MyFile.ReadLine
MeineDatei = Split(MeineDatei, CHR(34))
TextNeuA = MeineDatei(0)
TextNeuB = MeineDatei(1)
TextNeuB = Replace(TextNeuB,",",".")
TextNeuB = Replace(TextNeuB,CHR(34),"")
MyFileNeu.WriteLine (TextNeuA & TextNeuB)
Loop
MyFile.Close
MyFileNeu.Close
Set FSO = nothing
Set MyFile = nothing
Set MyFileNeu = nothing
MeineCSVDatei = "C:\Test.txt"
MeineCSVDAteiNew = "C:\Test.txt.csv"
MeineCSVDAteiNew = "C:\Test.txt.csv"
In meinem Script wird die Originaldatei nicht überschrieben. Teste erst einmal.
Gruß
Tsuki
Hallo Praktikantin!
Gruß Dieter
Zitat von @Praktikantin:
Tsuki, leider funktioniert das Script nicht weil das Muster nicht bei
allen Zeilen gleich ist... Vielen Dank auf jeden Fall. Für eine
Fixed Length Datei ist es auf jedem Fall super!!!
Könntest Du das anhand von Beispielen etwas genauer erklären?Tsuki, leider funktioniert das Script nicht weil das Muster nicht bei
allen Zeilen gleich ist... Vielen Dank auf jeden Fall. Für eine
Fixed Length Datei ist es auf jedem Fall super!!!
Gruß Dieter