Text via VBA in Textdatei (txt) suchen und ersetzen
|
Autor |
Nachricht |
fuxl66
Im Profil kannst Du frei den Rang ändern
Verfasst am: 11. Sep 2012, 10:00 Rufname:
|
|
Version: Office 2010 |
|
Hallo erstmal. Sehr umfangreiches Forum hier an dem ich mich gerne beteiligen würde. Zuerst einmal bräuchte ich jedoch eure Hilfe.
Ich habe hier ein File "Alt.txt"
In diesem File würde ich gerne automatisiert via VBA einen Textbaustein ersetzen und als "Neu.txt" abspeichern.
Im File sollen alle Einträge "Blau" durch "Rot" ersetzt werden!
Könnt ihr mir damit helfen?
Danke
fuxl66
|
|
bst
Programmierer
Verfasst am: 11. Sep 2012, 10:18 Rufname: Bernd
Wohnort: Ilsfeld
|
| |
Version: Office 2010 |
|
Hi,
warum willst Du das in VBA machen? Dafür gibt es denn M.E. geeignetere Wege z.B. direkt auf der Kommandozeile mit SED (das gibt es auch für Windows). Einfach:
Zitat: | c:\> sed < alt.txt -e "s/Blau/Rot/" > neu.txt
|
und fertig.
cu, Bernd
--
http://de.wikipedia.org/wiki/Sed_(Unix)
|
|
fuxl66
Im Profil kannst Du frei den Rang ändern
Verfasst am: 11. Sep 2012, 10:29 Rufname:
|
|
Version: Office 2010 |
|
Dies wäre natürlich auch meine bevorzugte Variante, jedoch bekomm ich es mit ner Batch Datei nicht hin.
Der Eintrag:
D:\> sed < Alt.txt -e "s/Blau/Rot/" > Neu.txt
liefert mir eine leere Neu.txt ???!?
In der Alt.txt steht als Testumgebung folgendes:
Blau
Grün
Rot
Gelb
Blau
Braun
|
|
EtoPHG
Ich sehe dunkle Zeiten aufziehen...

Verfasst am: 11. Sep 2012, 10:29 Rufname: Hansueli
|
|
Version: Office 2010 |
|
Hallo,
z.B. so (nach einer Idee von Nepumuk) :
Code: | Option Explicit
Public Sub ReplaceTxt()
Dim objFSO As Object, objRegEx As Object
Dim objTextStram As Object, objFile As Object
Dim intFilenumber As Integer
Dim vntText As Variant
Dim strInp As String
Dim arrTmp
strInp = "D:\TextDateien\Alt.txt" ' ggf. anpassen!!!!
arrTmp = Dir(strInp)
If arrTmp = "" Then
MsgBox "Datei " & strInp & " nicht gefunden!", vbCritical, "Fehler Dateiname"
Exit Sub
End If
arrTmp = InputBox("Bitte Text VORHER;NACHHER angeben:", "Replace in Datei " & arrTmp, "VORHER;NACHHER")
arrTmp = Split(arrTmp, ";")
If UBound(arrTmp) <> 1 Then
MsgBox "Nichts zu machen!", vbExclamation, "Fehler Eingabe"
Exit Sub
End If
intFilenumber = FreeFile
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.GetFile(strInp)
Set objTextStram = objFile.OpenAsTextStream(1, 0)
vntText = objTextStram.ReadAll
objTextStram.Close
Set objRegEx = CreateObject("VBScript.RegExp")
With objRegEx
.MultiLine = True
.Global = True
.IgnoreCase = False
.Pattern = arrTmp(0)
vntText = .Replace(vntText, arrTmp(1))
End With
Open Replace(strInp, "Alt", "Neu") For Output As #intFilenumber
Print #intFilenumber, vntText
Close #intFilenumber
MsgBox arrTmp(0) & " wurde ersetzt durch " & arrTmp(1) & vbCrLf & _
"in der Datei " & strInp, vbInformation, "Text ersetzen"
End Sub | Gruess Hansueli
_________________ Forenhelfer danken für eine Rückmeldung!
Der Kluge lernt, der Dummkopf erteilt gern Belehrungen. - Anton Tschechow
|
|
fuxl66
Im Profil kannst Du frei den Rang ändern
Verfasst am: 11. Sep 2012, 10:43 Rufname:
|
| |
Version: Office 2010 |
|
das funktioniert schon mal.
Wie kann man nun die manuelle Eingabe raus nehmen und fix durch "Blau" "Rot" ersetzen? Es soll automatisiert ablaufen ohne usereingabe!
Weiters würde ich gerne eine *.vbs Datei erzeugen die ich dann in meine Batch Datei integrieren kann.
|
|
EtoPHG
Ich sehe dunkle Zeiten aufziehen...

Verfasst am: 11. Sep 2012, 10:59 Rufname: Hansueli
|
|
Version: Office 2010 |
|
Hallo,
'Automatisch' aber 'statisch!'
Code: | Public Sub ReplaceTxt()
Dim objFSO As Object, objRegEx As Object
Dim objTextStram As Object, objFile As Object
Dim intFilenumber As Integer
Dim vntText As Variant
Dim strInp As String
Dim arrTmp
strInp = "D:\TextDateien\Alt.txt" ' ggf. anpassen!!!!
arrTmp = Array("Blau""Rot")
intFilenumber = FreeFile
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.GetFile(strInp)
Set objTextStram = objFile.OpenAsTextStream(1, 0)
vntText = objTextStram.ReadAll
objTextStram.Close
Set objRegEx = CreateObject("VBScript.RegExp")
With objRegEx
.MultiLine = True
.Global = True
.IgnoreCase = False
.Pattern = arrTmp(0)
vntText = .Replace(vntText, arrTmp(1))
End With
Open Replace(strInp, "Alt", "Neu") For Output As #intFilenumber
Print #intFilenumber, vntText
Close #intFilenumber
End Sub
|
Zitat: | Weiters würde ich gerne eine *.vbs Datei erzeugen die ich dann in meine Batch Datei integrieren kann. | Wir sind hier in einem XL-Forum, schau dich halt in einem VBS-Forum um!
Gruess Hansueli
_________________ Forenhelfer danken für eine Rückmeldung!
Der Kluge lernt, der Dummkopf erteilt gern Belehrungen. - Anton Tschechow
|
|
Phelan XLPH
Fortgeschritten

Verfasst am: 11. Sep 2012, 11:12 Rufname: Phelan
|
|
Version: Office 2010 |
|
oder so:
Code: | Public Sub ReplaceTxt()
Dim intFilenumber As Integer
Dim vntText As Variant
Dim strInp As String
Dim vTmp, Ms As Object
strInp = "D:\Test\z321.txt" ' ggf. anpassen!!!!
vTmp = Array("Blau", "Rot")
intFilenumber = FreeFile
Open strInp For Input As #intFilenumber
vntText = Input(LOF(intFilenumber), #intFilenumber)
Close #intFilenumber
With CreateObject("VBScript.RegExp")
.MultiLine = True
.Global = True
.IgnoreCase = False
.Pattern = vTmp(0)
Set Ms = .Execute(vntText)
vntText = .Replace(vntText, vTmp(1))
End With
If Ms.Count Then
strInp = Replace(strInp, Dir(strInp), Replace(Dir(strInp), ".", "Neu."))
intFilenumber = FreeFile
Open strInp For Output As #intFilenumber
Print #intFilenumber, vntText
Close #intFilenumber
Else
MsgBox "Nix zm Ersetzen gefunden!"
End If
End Sub |
|
|
bst
Programmierer
Verfasst am: 11. Sep 2012, 11:13 Rufname: Bernd
Wohnort: Ilsfeld
|
|
Version: Office 2010 |
|
Auch nochmals Hallo,
Zitat: | Dies wäre natürlich auch meine bevorzugte Variante, jedoch bekomm ich es mit ner Batch Datei nicht hin.
Der Eintrag:
D:\> sed < Alt.txt -e "s/Blau/Rot/" > Neu.txt
liefert mir eine leere Neu.txt ???!? |
- Liegt alt.txt auch in d:\ ?
- was liefert denn sed --version sowie sed --help bzw. sed -?
- Versuche vielleicht auch mal:
Code: | D:\> sed "s/Blau/Rot/" Alt.txt > Neu.txt |
Hier funktionieren übrigens beide Varianten mit zwei unterschiedlichen GNU sed Versionen.
cu, Bernd
|
|
Eierlein
Gast
Verfasst am: 11. Sep 2012, 14:54 Rufname:
|
|
Version: Office 2010 |
|
Und hier eine vbs Version:
Code: |
'Test.vbs
Option explicit
Dim fso, f, text
Const ForInput = 1, ForOutput = 2
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.OpenTextFile("d:\##\a.txt", ForInput)
Text = f.ReadAll
text = Replace(text, "Blau", "Rot")
f.close
Set f = fso.OpenTextFile("d:\##\b.txt", ForOutput, True)
f.Write(text)
f.Close
|
|
|
fuxl66
Im Profil kannst Du frei den Rang ändern
Verfasst am: 11. Sep 2012, 15:11 Rufname:
|
|
Version: Office 2010 |
|
Eierlein - 11. Sep 2012, 14:54 hat folgendes geschrieben: | Und hier eine vbs Version:
Code: |
'Test.vbs
Option explicit
Dim fso, f, text
Const ForInput = 1, ForOutput = 2
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.OpenTextFile("d:\##\a.txt", ForInput)
Text = f.ReadAll
text = Replace(text, "Blau", "Rot")
f.close
Set f = fso.OpenTextFile("d:\##\b.txt", ForOutput, True)
f.Write(text)
f.Close
|
|
Perfekt. Genau so funktioniert das wie ich mir das vorgestellt habe. DANKE.
|
|
Eierlein
Gast
Verfasst am: 11. Sep 2012, 15:18 Rufname:
|
|
Version: Office 2010 |
|
Und das ohne Regex-
|
|
EtoPHG
Ich sehe dunkle Zeiten aufziehen...

Verfasst am: 11. Sep 2012, 15:25 Rufname: Hansueli
|
| |
Version: Office 2010 |
|
Hallo,
Zitat: | Und das ohne Regex-... |
Booaahh. Regex wurde in meinem Vorschlag eingesetzt, da es einfachere Anpassungen an Gross/Kleinschreibung oder Like Operatoren möglich macht.
Replace ist stur und Case-Sensitiv!
Aber wichtig ist ja, das des Anfragers Problem gelöst ist.
Gruess Hansueli
_________________ Forenhelfer danken für eine Rückmeldung!
Der Kluge lernt, der Dummkopf erteilt gern Belehrungen. - Anton Tschechow
|
|
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum nicht posten Du kannst Dateien in diesem Forum herunterladen
|
|
|
Verwandte Themen |
Forum / Themen |
Antworten |
Autor |
Aufrufe |
Letzter Beitrag |
 |
Excel Formeln: Zellen die Text enthalten vergleichen? |
2 |
HeikeFfm |
1419 |
03. Mai 2005, 16:39 HeikeFfm  |
 |
Excel Formeln: Zahl mit Zahl ersetzen und mit der Formel Multiplizieren??? |
7 |
Iggy |
912 |
14. Apr 2005, 21:53 ae  |
 |
Excel Formeln: Text aus Zelle (Tabellenblattname) als Formelbestandteil ? |
4 |
Sid |
2003 |
03. März 2005, 17:28 Gast  |
 |
Excel Formeln: Zahl durch Wort ersetzen. |
1 |
Carrear |
3152 |
23. Feb 2005, 15:46 ae  |
 |
Excel Formeln: SVERWEIS - NACH 2 KRITERIEN GLEICHZEITIG SUCHEN |
6 |
janine071108 |
3121 |
21. Feb 2005, 17:55 Arnim  |
 |
Excel Formeln: Text von Tabelle1 auch in Tabelle 2 kopieren |
7 |
Pinguin1977 |
2848 |
30. Jan 2005, 16:56 Pinguin1977  |
 |
Excel Formeln: Einzelne Wörter löschen (ersetzen/formel) |
2 |
Michi_wien |
4587 |
29. Jan 2005, 12:33 Gast  |
 |
Excel Formeln: Erst Spalte dann wert suchen zeile ausgeben |
2 |
Kai2k |
3055 |
07. Jan 2005, 12:10 Kai2k  |
 |
Excel Formeln: Excel Formel Zahlen von Text trennen |
2 |
Hauke81 |
2948 |
29. Nov 2004, 16:32 derschroe  |
 |
Excel Formeln: Suchen eines Wertes in einer Zeile |
1 |
AxelChris |
1731 |
25. Nov 2004, 17:25 Patrick0705  |
 |
Excel Formeln: Formel als Text in Nachbarzelle kopieren |
6 |
blauvogel |
1129 |
19. Okt 2004, 16:54 blauvogel  |
 |
Excel Formeln: Funktion TEXT |
5 |
Gast |
1702 |
04. Okt 2004, 14:05 Thomas Ramel  |
|
|