thomas0204
Goto Top

Klammern und Inhalt der Klammern aus einem Text entfernen per Batch

Hey,
ich habe mal wieder ein Problem und zwar habe ich diesmal eine Text Datei wo die Klammern +Inahlt entfernt werden sollen.
Die Klammern bekommen ich entfern aber ich weiß nicht wie ich dazu noch den Inhalt entfernt bekomme.
Also die Texte Datei sieht ungefähr so aus:

Error (Fehlercode 5825) Probleme mit...
Fail [error 458d4] user...
Fail [error 458d4 drtd] user...

Nacher möchte ch alt nur noch so eine Textdatei haben:

Error Probleme mit...
Fail user...

Ich hoffe ihr könnt mir helfen face-smile
LG Thomas0204

Content-ID: 175112

Url: https://administrator.de/contentid/175112

Ausgedruckt am: 22.11.2024 um 21:11 Uhr

Skyemugen
Skyemugen 22.10.2011 um 11:49:52 Uhr
Goto Top
Aloha,

leider habe ich momentan nicht wirklich Zeit, daher nur ein halboptimaler Vorschlag von mir jetzt:
for /f "usebackq tokens=1,2,* delims=()" %%s in ("E:\Skripte\datei.log") do >>"E:\Skripte\Ausgabe.txt" echo %%s%%u  
in der Annahme, dass () auch nur in den Fehlercodes vorkommen ...

halboptimal deshalb, weil du jetzt zwei Leerzeichen bekommst Error Probleme mit ...

... aber vielleicht schaffst du es ja, es selbst noch zum Optimalen hinzubauen (mit einem Unterprogramm)

greetz André
Friemler
Friemler 22.10.2011 um 11:54:35 Uhr
Goto Top
Hallo Thomas0204,

ich rate zu einem VBScript. Das Bearbeiten von Dateien mit beliebigem Inhalt gehört nicht zu den Stärken von Batchscript. Es gibt einige Zeichen, die den Batchinterpreter bei der Verarbeitung durcheinander bringen.

Teste mal das hier:
'Ein- und Ausgabedatei hier eintragen  
strInFile   = "Test.txt"  
strOutFile  = "Test neu.txt"  

'Alle Arten von Klammern  
arrBrackets = Array("()", "", "{}", "<>")  


Const ForReading = 1

'Das Klammer-Array tauglich machen  
'als Suchmuster für Reguläre Ausdrücke.  
'.* steht für alle Zeichen, die zwischen  
'den Klammern stehen, die Klammern  
'müssen mit \ escaped werden, da sie  
'zur Syntax von Regulären Ausdrücken gehören.  
' {0,1} bewirkt, dass zusätzlich zu der zu  
'löschenden Klammer auch noch EIN  
'nachfolgendes Leerzeichen gelöscht wird,  
'wenn es denn vorhanden ist.  
For I = 0 To UBound(arrBrackets)
  arrBrackets(I) = Replace(arrBrackets(I), "()", "\(.*\) {0,1}")  
  arrBrackets(I) = Replace(arrBrackets(I), "", "\[.*\] {0,1}")  
  arrBrackets(I) = Replace(arrBrackets(I), "{}", "\{.*\} {0,1}")  
  arrBrackets(I) = Replace(arrBrackets(I), "<>", "<.*> {0,1}")  
Next

'Dateisystemobjekt erzeugen  
Set objFSO = CreateObject("Scripting.FileSystemObject")  

'Eingabedatei öffnen, auslesen und wieder schließen  
Set objInFile = objFSO.OpenTextFile(strInFile, ForReading, False)
strContent    = objInFile.ReadAll
objInFile.Close

'Objekt für Reguläre Ausdrücke erzeugen und einstellen,  
'dass alle Fundstellen berücksichtigt werden sollen  
Set objRegExp    = New RegExp
objRegExp.Global = True

'Alle Klammerarten suchen und ersetzen  
For Each strBrackets In arrBrackets
  objRegExp.Pattern = strBrackets
  strContent = objRegExp.Replace(strContent, "")  
Next

'Ausgabedatei öffnen und  
'den veränderten Dateiinhalt in neue Datei schreiben  
'Ausgabedatei schließen  
Set objOutFile = objFSO.CreateTextFile(strOutFile, True)
objOutFile.Write strContent
objOutFile.Close

Zeile 2 und 3 musst Du anpassen, den Code als VBS-Datei speichern und das Script dann folgendermaßen starten:
cscript /nologo "PfadUndNameDesScripts.vbs"

Gruß
Friemler
Thomas0204
Thomas0204 22.10.2011 um 12:17:35 Uhr
Goto Top
@Skyemugen
Deine lösung war völlig ausreichend face-smile Danke