VB6 Codeschnipsel für Replacefunktion
nabend,
wer kann mir helfen? für fachleute wahrscheinlich ein lacher
aber ich suche schon seit stunden eine möglichkeit wie ich in einer 22kb
großen textdatei nach einer bestimmten ziffernfolge suche und diese (die
übrigens mehrfach im text vorkommt) durch eine andere zu ersetzen.
sinngemäss:
suche nach 1148888000 und ersetze diese druch 1149999000
wobei eben die 8888 durch die 9999 ersetz werden muss.
für eine ähnlich sache hatte ich mal einen wunderherlichen vbs code,
(http://www.vb-magazin.de/forums/forums/t/4020.aspx) doch dieser fühlt
sich mit meiner jetzigen aufgabe etwas überfordert, obwohl es anfänglich recht
gut los geht´, doch wie weiter?? Wer kennt sich aus! Derzeit ersetzt er nicht,
sondern löscht die Datei.
zB:
[Code]
'Variablen & Konstanten definieren
Dim fso, objEingabe, objAusgabe, objSuchen
Dim Pfad, EingabeDatei, AusgabeDatei, Zeile, FeldAlt, FeldNeu
Private Sub Suchen_Click()
' Suchen der notwenigen Datei im Ornder wo das Tool liegt
Pfad = "\"
EingabeDatei = "XYZ.TXT"
AusgabeDatei = "XYZ.TXT"
' Der Textinhalt der gesucht und verändert werden soll
FeldAlt = "0001118888222"
FeldNeu = "0001119999222"
'also die 8888 gegen die 9999
Const ForReading = 1, ForWriting = 2, ForAppending = 8
'Objekt erstellen
Set fso = CreateObject("Scripting.FileSystemObject")
If fso.FileExists(EingabeDatei) Then
Set objEingabe = fso.OpenTextFile(EingabeDatei, ForReading)
Else
'MsgBox "Fehler: Eingabedatei ist nicht vorhanden."
Exit Sub
End If
Set objAusgabe = fso.OpenTextFile(AusgabeDatei, ForWriting, True)
Do Until objEingabe.AtEndofStream
' Zeile lesen, Feld/Zeile/Zeichen austauschen und Zeile schreiben
Zeile = objEingabe.ReadLine
objAusgabe.WriteLine Vorspann & Replace(Zeile, FeldAlt, FeldNeu)
' Loop ist die Wiederholung des ganzen ab dem Sub, wobei sich die Wartezeit dessen nach dem Timer richtet
Loop
objEingabe.Close
objAusgabe.Close
' Eingabedatei löschen
fso.DeleteFile EingabeDatei, True
' Ausgabedatei umbenennen durch MoveFile
fso.MoveFile AusgabeDatei, EingabeDatei
Set objAusgabe = Nothing
Set objEingabe = Nothing
Set fso = Nothing
End Sub[/code]
Wer kann einem VBDAU helfen. ;-(
wer kann mir helfen? für fachleute wahrscheinlich ein lacher
aber ich suche schon seit stunden eine möglichkeit wie ich in einer 22kb
großen textdatei nach einer bestimmten ziffernfolge suche und diese (die
übrigens mehrfach im text vorkommt) durch eine andere zu ersetzen.
sinngemäss:
suche nach 1148888000 und ersetze diese druch 1149999000
wobei eben die 8888 durch die 9999 ersetz werden muss.
für eine ähnlich sache hatte ich mal einen wunderherlichen vbs code,
(http://www.vb-magazin.de/forums/forums/t/4020.aspx) doch dieser fühlt
sich mit meiner jetzigen aufgabe etwas überfordert, obwohl es anfänglich recht
gut los geht´, doch wie weiter?? Wer kennt sich aus! Derzeit ersetzt er nicht,
sondern löscht die Datei.
zB:
[Code]
'Variablen & Konstanten definieren
Dim fso, objEingabe, objAusgabe, objSuchen
Dim Pfad, EingabeDatei, AusgabeDatei, Zeile, FeldAlt, FeldNeu
Private Sub Suchen_Click()
' Suchen der notwenigen Datei im Ornder wo das Tool liegt
Pfad = "\"
EingabeDatei = "XYZ.TXT"
AusgabeDatei = "XYZ.TXT"
' Der Textinhalt der gesucht und verändert werden soll
FeldAlt = "0001118888222"
FeldNeu = "0001119999222"
'also die 8888 gegen die 9999
Const ForReading = 1, ForWriting = 2, ForAppending = 8
'Objekt erstellen
Set fso = CreateObject("Scripting.FileSystemObject")
If fso.FileExists(EingabeDatei) Then
Set objEingabe = fso.OpenTextFile(EingabeDatei, ForReading)
Else
'MsgBox "Fehler: Eingabedatei ist nicht vorhanden."
Exit Sub
End If
Set objAusgabe = fso.OpenTextFile(AusgabeDatei, ForWriting, True)
Do Until objEingabe.AtEndofStream
' Zeile lesen, Feld/Zeile/Zeichen austauschen und Zeile schreiben
Zeile = objEingabe.ReadLine
objAusgabe.WriteLine Vorspann & Replace(Zeile, FeldAlt, FeldNeu)
' Loop ist die Wiederholung des ganzen ab dem Sub, wobei sich die Wartezeit dessen nach dem Timer richtet
Loop
objEingabe.Close
objAusgabe.Close
' Eingabedatei löschen
fso.DeleteFile EingabeDatei, True
' Ausgabedatei umbenennen durch MoveFile
fso.MoveFile AusgabeDatei, EingabeDatei
Set objAusgabe = Nothing
Set objEingabe = Nothing
Set fso = Nothing
End Sub[/code]
Wer kann einem VBDAU helfen. ;-(
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 109311
Url: https://administrator.de/contentid/109311
Ausgedruckt am: 22.11.2024 um 20:11 Uhr
9 Kommentare
Neuester Kommentar
Hallo CanTan!
Lässt sich auch kürzer abhandeln:
Da ohnehin bereits der gesamte Text gelesen ist, kann beim Schreiben in die Ausgabedatei tatsächlich der gleiche Dateiname verwendet werden - dadurch wird automatisch die Eingabedatei überschrieben.
Wenn übrigens die Pfadangabe einen Sinn haben soll, müsstest Du diesen Pfad auch verwenden, etwa in der Art:
Grüße
bastla
P.S.: Der Formatierungshilfe könntest Du entnehmen, dass für die Kennzeichnung als "Code" nicht "", sondern "<>" zu verwenden sind.
Lässt sich auch kürzer abhandeln:
'Variablen & Konstanten definieren
Dim fso, objEingabe, objAusgabe, objSuchen
Dim Pfad, EingabeDatei, AusgabeDatei, Zeile, FeldAlt, FeldNeu
Private Sub Suchen_Click()
' Suchen der notwenigen Datei im Ornder wo das Tool liegt
Pfad = "\"
EingabeDatei = "XYZ.TXT"
AusgabeDatei = "XYZ.TXT"
' Der Textinhalt der gesucht und verändert werden soll
FeldAlt = "0001118888222"
FeldNeu = "0001119999222"
'also die 8888 gegen die 9999
Const ForReading = 1, ForWriting = 2, ForAppending = 8
'Objekt erstellen
Set fso = CreateObject("Scripting.FileSystemObject")
If fso.FileExists(EingabeDatei) Then
' gesamten Dateiinhalt einlesen
Gesamttext = fso.OpenTextFile(EingabeDatei, ForReading).ReadAll
Else
'MsgBox "Fehler: Eingabedatei ist nicht vorhanden."
Exit Sub
End If
' im gesamten Dateiinhalt Ersetzung vornehmen und neuen Dateiinhalt in Ausgabedatei schreiben
fso.OpenTextFile(AusgabeDatei, ForWriting, True).Write Replace(Gesamttext, FeldAlt, FeldNeu)
Set fso = Nothing
End Sub
Wenn übrigens die Pfadangabe einen Sinn haben soll, müsstest Du diesen Pfad auch verwenden, etwa in der Art:
If fso.FileExists(Pfad & EingabeDatei) Then
bastla
P.S.: Der Formatierungshilfe könntest Du entnehmen, dass für die Kennzeichnung als "Code" nicht "", sondern "<>" zu verwenden sind.
Hallo CanTan!
Zur Sicherheit vorweg nochmals der Hinweis auf die Verwendung der Pfad-Angabe, also jeweils
bzw
Aktiviere auch zur Sicherheit die auskommentierte Zeile 24 wieder.
Sollte es aber tatsächlich ein Timing-Problem sein, dann bleib dabei, zunächst die Ausgabedatei (aber mit einem anderen Namen!) zu erstellen und nach dem Löschen der Eingabedatei die Ausgabedatei per "MoveFile" umzubenennen.
Dazu müsstest Du in meinem Vorschlag nur den anderen Dateinamen in Zeile 9 eintragen und ab Zeile 30 einfügen:
Grüße
bastla
Zur Sicherheit vorweg nochmals der Hinweis auf die Verwendung der Pfad-Angabe, also jeweils
Pfad & EingabeDatei
Pfad & AusgabeDatei
Sollte es aber tatsächlich ein Timing-Problem sein, dann bleib dabei, zunächst die Ausgabedatei (aber mit einem anderen Namen!) zu erstellen und nach dem Löschen der Eingabedatei die Ausgabedatei per "MoveFile" umzubenennen.
Dazu müsstest Du in meinem Vorschlag nur den anderen Dateinamen in Zeile 9 eintragen und ab Zeile 30 einfügen:
' Eingabedatei löschen
fso.DeleteFile Pfad & EingabeDatei, True
' Ausgabedatei umbenennen durch MoveFile
fso.MoveFile Prad & AusgabeDatei, Pfad & EingabeDatei
bastla
bastlas Code müste laufen.
Der Code aus dem Eingangsposting tut auch genau das was er soll. Das problem liegt ind er Reihenfolge. Erst wird die eingangsdatei gelesen, dann in die Ausgangsdatei geschrieben, dann die Eingangsdatei gelöscht und zum Schluss die Ausgangsdatei umbenannt. Das Problem ist das die Ausgangsdatei udn die Eingangsdatei den gleichen Namen haben. Wird also die Eingangsdatei gelöscht bedeutet dies das die Ausgangsdatei gelöscht wird. Gib der Ausgangsdatei einfach eine anderennamen oder ersetzte die Zeile
Der Code aus dem Eingangsposting tut auch genau das was er soll. Das problem liegt ind er Reihenfolge. Erst wird die eingangsdatei gelesen, dann in die Ausgangsdatei geschrieben, dann die Eingangsdatei gelöscht und zum Schluss die Ausgangsdatei umbenannt. Das Problem ist das die Ausgangsdatei udn die Eingangsdatei den gleichen Namen haben. Wird also die Eingangsdatei gelöscht bedeutet dies das die Ausgangsdatei gelöscht wird. Gib der Ausgangsdatei einfach eine anderennamen oder ersetzte die Zeile
AusgabeDatei = "XYZ.TXT"
durch dieseAusgabeDatei = EingabeDatei & ".tmp"
Dann geht das. Der Name der Ausgangsdatei ist völlig egal da sie zum Schluss sowieso umbennant wird wie die Eingangsdatei.
Hallo CanTan!
Hast Du auch versucht, mit der Ausgabedatei die Eingabedatei direkt zu überschreiben? Nach dem Einlesen wird letztere ja nicht mehr benötigt.
Dazu wären einfach Pfad und Name der Eingabedatei zu verwenden:
Ansonsten: Wie entsteht denn die Eingabedatei? Sieht ja fast so aus, als würde ein anderer Prozess diese Datei (noch) geöffnet halten, was natürlich auch die eben beschriebene "Direkt"-Variante scheitern ließe ...
Grüße
bastla
Hast Du auch versucht, mit der Ausgabedatei die Eingabedatei direkt zu überschreiben? Nach dem Einlesen wird letztere ja nicht mehr benötigt.
Dazu wären einfach Pfad und Name der Eingabedatei zu verwenden:
fso.OpenTextFile(EingabeDatei, ForWriting, True).Write Replace(Gesamttext, FeldAlt, FeldNeu)
Grüße
bastla