chrishh
Goto Top

Suchen und Ersetzen in .bat Datei mit Bedingung

Hallo zusammen,

wir exportieren aus einem Programm heraus Dateien die eine bestimmte Formatierung haben damit Sie auf einer Website der spanischen Polizei richtig eingelesen werden können. Es sind Meldelisten von unseren Hotelgästen. Da unser Programm in Deutsch ist und die Spanier aber gerne alles in Spanisch haben möchten habe ich eine batch Datei mit einem VB Script was die deutschen Ländernamen durch spanische ersetzt.

Die formatierten Zeilen in der Datei sehen wie folgt aus:

C5204661|I|20101214|STUDER
10CF31776|I|20100720|STUDER
712002310|I|20100916|KALLYAKIN
F0826056|I|20040309|GAECHTER
NY6065R14|I|20110401|SONKE
XF623864-Q|I|20091101|RODRIGUEZ

Nur zur Nachvollziehbarkeit:

Jetzt haben wir das Problem dass unser Programm für den Export nur die Ausweistypen "P" und "I" kennt, das ist bei fast allen Ländern auch in Ordnung, bis auf SPANIEN.

Die Spanier müssen als Ausweistyp ein "D" dort stehen haben, sprich aus:
XF623864-Q|I|20091101|RODRIGUEZ
müsste
XF623864-Q|D|20091101|RODRIGUEZ
gemacht werden.

Ist es möglich eine Abfrage da rein zu basteln die abfragt wenn in einer Zeile |ESPAÑA| steht, in der gleichen Zeile das |I| durch |D| ersetzt werden soll?!

Hier mein bereits vorhandenes Script:

@echo off & setlocal
set "Datei=Z:\Jandarma\18685AAH01.036"

set R=%temp%\Replace5.vbs

%R% echo F = WScript.Arguments(0)
%R% echo Set fso = CreateObject("Scripting.FileSystemObject")
%R% echo T = fso.OpenTextFile(F).ReadAll

%R% echo T = Replace(T, "AEGYPTEN", "EGIPTO")
%R% echo T = Replace(T, "DAENEMARK", "DINAMARCA")
%R% echo T = Replace(T, "DEUTSCHLAND", "ALEMANIA")
%R% echo T = Replace(T, "ALGERIEN", "ARGELIA")
%R% echo T = Replace(T, "ARMENIEN", "ARMENIA")
%R% echo T = Replace(T, "ASERBAIDSCHAN", "AZERBAIYÁN")
%R% echo T = Replace(T, "BELGIEN", "BÉLGICA")
%R% echo T = Replace(T, "BRASILIEN", "BRASIL")
%R% echo T = Replace(T, "BULGARIEN", "BULGARIA")
...

%R% echo fso.CreateTextFile(F).Write T
for %%f in ("%Datei%") do cscript //nologo %R% "%%f"


Hoffe mir kann jemand helfen.

Vielen Dank

Content-Key: 188709

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

Printed on: April 25, 2024 at 10:04 o'clock

Member: ColdZero89
ColdZero89 Jul 27, 2012 updated at 09:04:21 (UTC)
Goto Top
Moin,

soweit ich richtig verstanden habe, sobald da - bei deinen Beispielen Manolo - ESPANA steht, soll egal welcher Buchstabe durch D ersetzt werden?

Btw Setz das ganze mal in ein CODE mit < code > und am ende < /code > (nur ohne Leerzeichen), dann ist das übersichtlicher.

Gruß Zero
Member: chrishh
chrishh Jul 27, 2012 at 09:06:25 (UTC)
Goto Top
Hallo auch und vielen Dank für die schnelle Antwort.

Nicht jeder Buchstabe soll durch D ersetzt werden, es soll nur der Ausweistyp von |I| oder |P| (je nachdem welcher in der Zeile eingetragen ist) durch |D| ersetzt werden. Aber das halt nur in der Zeile wo |ESPANA| als Land steht.

Hier noch mal die ganze Datei, die bis jetzt nur die Ländernamen in Spanisch ändert:

@echo off & setlocal 
set "Datei=Z:\Jandarma\18685AAH01.036"  

set R=%temp%\Replace5.vbs 

>%R%  echo F = WScript.Arguments(0)
>>%R% echo Set fso = CreateObject("Scripting.FileSystemObject")  
>>%R% echo T = fso.OpenTextFile(F).ReadAll

>>%R% echo T = Replace(T, "AEGYPTEN", "EGIPTO")   
>>%R% echo T = Replace(T, "DAENEMARK", "DINAMARCA")  
>>%R% echo T = Replace(T, "DEUTSCHLAND", "ALEMANIA")  
>>%R% echo T = Replace(T, "ALGERIEN", "ARGELIA")   
>>%R% echo T = Replace(T, "ARMENIEN", "ARMENIA")   
>>%R% echo T = Replace(T, "ASERBAIDSCHAN", "AZERBAIYÁN")   
>>%R% echo T = Replace(T, "BELGIEN", "BÉLGICA")   
>>%R% echo T = Replace(T, "BRASILIEN", "BRASIL")  
>>%R% echo T = Replace(T, "BULGARIEN", "BULGARIA")  
>>%R% echo T = Replace(T, "ELFENBEINKÜSTE", "COSTA DE MARFIL")  
>>%R% echo T = Replace(T, "ESTLAND", "ESTONIA")  
>>%R% echo T = Replace(T, "FINNLAND", "FINLANDIA")  
>>%R% echo T = Replace(T, "FRANKREICH", "FRANCIA")  
>>%R% echo T = Replace(T, "GEORGIEN", "GEORGIA")  
>>%R% echo T = Replace(T, "GRIECHENLAND", "GRECIA")  
>>%R% echo T = Replace(T, "GROSSBRITANNIEN", "REINO UNIDO")  
>>%R% echo T = Replace(T, "IRLAND", "IRLANDA")  
>>%R% echo T = Replace(T, "ISLAND", "ISLANDIA")  
>>%R% echo T = Replace(T, "ITALIEN", "ITALIA")  
>>%R% echo T = Replace(T, "JAPAN", "JAPÓN")  
>>%R% echo T = Replace(T, "KAMBODSCHA", "CAMBODIA")  
>>%R% echo T = Replace(T, "KANADA", "CANADÁ")  
>>%R% echo T = Replace(T, "KASACHSTAN", "KAZAJSTÁN")  
>>%R% echo T = Replace(T, "KOLUMBIEN", "COLOMBIA")  
>>%R% echo T = Replace(T, "KROATIEN", "CROACIA")  
>>%R% echo T = Replace(T, "LETTLAND", "LETONIA")  
>>%R% echo T = Replace(T, "LIBANON", "LIBANO")  
>>%R% echo T = Replace(T, "LITAUEN", "LITUANIA")  
>>%R% echo T = Replace(T, "LUXEMBURG", "LUXEMBURGO")  
>>%R% echo T = Replace(T, "MALAYSIA", "MALASIA")  
>>%R% echo T = Replace(T, "MALEDIVEN", "MALDIVAS")  
>>%R% echo T = Replace(T, "MAROKKO", "MARRUECOS")  
>>%R% echo T = Replace(T, "MAURITIUS", "MAURÍTANIA")  
>>%R% echo T = Replace(T, "NEUSEELAND", "NUEVA ZELANDIA")  
>>%R% echo T = Replace(T, "NIEDERLANDE", "PAÍSES BAJOS")  
>>%R% echo T = Replace(T, "NORDKOREA", "COREA DEL NORTE")  
>>%R% echo T = Replace(T, "NORWEGEN", "NORUEGA")  
>>%R% echo T = Replace(T, "OESTERREICH", "AUSTRIA")  
>>%R% echo T = Replace(T, "PHILIPPINEN", "FILIPINAS")  
>>%R% echo T = Replace(T, "POLEN", "POLONIA")  
>>%R% echo T = Replace(T, "RUMAENIEN", "RUMANIA")  
>>%R% echo T = Replace(T, "RUSSLAND", "RUSIA")  
>>%R% echo T = Replace(T, "SCHOTTLAND", "ESCOCIA")  
>>%R% echo T = Replace(T, "SCHWEDEN", "SUECIA")  
>>%R% echo T = Replace(T, "SCHWEIZ", "SUIZA")  
>>%R% echo T = Replace(T, "SLOWAKEI", "ESLOVAQUIA")  
>>%R% echo T = Replace(T, "SLOWENIEN", "ESLOVENIA")  
>>%R% echo T = Replace(T, "SPANIEN", "ESPANA")  
>>%R% echo T = Replace(T, "SUEDAFRIKA", "SUDÁFRICA")  
>>%R% echo T = Replace(T, "SUEDKOREA", "COREA DEL SUR")  
>>%R% echo T = Replace(T, "TAIWAN", "TAIWÁN")  
>>%R% echo T = Replace(T, "THAILAND", "TAILANDIA")  
>>%R% echo T = Replace(T, "TSCHECHIEN", "REPÚBLICA CHECA")  
>>%R% echo T = Replace(T, "TSCHECHISCHE REPUBLIK", "REPÚBLICA CHECA")  
>>%R% echo T = Replace(T, "TUNESIEN", "TÚNEZ")  
>>%R% echo T = Replace(T, "TUERKEI", "TURQUÍA")  
>>%R% echo T = Replace(T, "UKRAINE", "UCRANIA")  
>>%R% echo T = Replace(T, "UNGARN", "HUNGRÍA")  
>>%R% echo T = Replace(T, "VATIKAN STADT", "CIUDAD DEL VATICANO")  
>>%R% echo T = Replace(T, "VEREINIGTE STAATEN VON AMERIKA", "ESTADOS UNIDOS")  
>>%R% echo T = Replace(T, "WALES", "GALES")  
>>%R% echo T = Replace(T, "WEISSRUSSLAND", "BELARÚS")  
>>%R% echo T = Replace(T, "ZYPERN", "CHIPRE")  


>>%R% echo fso.CreateTextFile(F).Write T
for %%f in ("%Datei%") do cscript //nologo %R% "%%f"  
Member: bastla
bastla Jul 27, 2012 updated at 13:07:43 (UTC)
Goto Top
Hallo chrishh!

Da Du eine zeilenweise Betrachtung benötigst, musst Du den Dateiinhalt nochmals splitten - etwa (als Ersatz der Zeilen 74 - 76):
>>%R% echo Z = Split(T, vbCrLf)
>>%R% echo For i = 0 To UBound(Z)
>>%R% echo     If InStr(Z(i), "|ESPAÑA|") ^> 0 Then Z(i) = Replace(Z(i), "|I|", "|D|")  
>>%R% echo Next
>>%R% echo fso.CreateTextFile(F).Write Join(Z, vbCrLf)
Grüße
bastla
Member: chrishh
chrishh Jul 27, 2012 at 13:00:08 (UTC)
Goto Top
Hallo bastla,

funktioniert genau wie gewünscht.

Ich danke Dir vielmals dafür!

Gruß,
Christian
Member: chrishh
chrishh Jul 27, 2012 at 13:57:26 (UTC)
Goto Top
Hola noch mal,

Kannst Du mir noch sagen wie ich einen zweiten String auf die gleiche Weise durch einen anderen ersetzen kann?

" soll ersetzt werden durch "2|") reinsetze macht das Skript gar nichts mehr. Es soll sich auch wieder nur auf die Spanier beziehen, also genau so wie du im Code oben geschrieben hast nur dass 2

Vielen Dank im Voraus
Member: bastla
bastla Jul 27, 2012 updated at 15:15:10 (UTC)
Goto Top
Hallo chrishh!

Mach aus der Zeile 3
>>%R% echo     If InStr(Z(i), "|ESPAÑA|") ^> 0 Then  
>>%R% echo         Z(i) = Replace(Z(i), "|I|", "|D|")  
>>%R% echo         Z(i) = Replace(Z(i), "2||", "2|")  
>>%R% echo     End If
Ganz nebenbei: Wieso packst Du das in einen Batch? Wenn nicht mehr als diese Umwandlung gefragt ist, könntest Du ja direkt ein VBS verwenden ...

Grüße
bastla