derori
Goto Top

Txt Datei (Bord512) durch Batch oder VB Script verändern.

Einen wunder schönen Mittag Zusammen,

ich hab folgendes Problem, wo ich im Moment keine Idee habe wie ich es lösen soll.

Ich hab einen Ordner voller txt. Dateien, deren Inhalt dem BORD512 Standard entspricht.

Zeile1:@@PHSTAT512-0512 Weitere Informationen von Zeile 1
Zeile2:Q0011111111111 Weitere Informationen von Zeile 2
Zeile3:Q102222222222- Weitere Informationen von Zeile 3
Zeile4:Q203333333333- Weitere Informationen von Zeile 4

Bindestriche sind leer Felder

Nun benötige ich eine Batch oder einen VB Script, der von Zeile 3 ab Q10 (also der dritten stelle) die weiteren 11 Stellen Kopiert und die 11 Stellen Ab Q00 in Zeile 2 Überschreibt.

Die weiteren Informationen in beiden Zeilen sollen unberührt bleiben.

Das Ergebnis sollte dann so aussehen:

Zeile1:@@PHSTAT512-0512 Weitere Informationen von Zeile 1
Zeile2:Q102222222222- Weitere Informationen von Zeile 2
Zeile3:Q102222222222- Weitere Informationen von Zeile 3
Zeile4:Q203333333333- Weitere Informationen von Zeile 4

Ich hoffe Ihr könnt verstehen was ich Meine, konnte durch die Suche nichts passendes finden.

Würde mich über Lösungsvorschläge riesig freuen.

Gruß Matze

Content-Key: 208357

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

Printed on: April 19, 2024 at 05:04 o'clock

Member: Endoro
Endoro Jun 20, 2013 updated at 10:33:34 (UTC)
Goto Top
Hallo Matze,

Zitat von @DerOri:
Würde mich über Lösungsvorschläge riesig freuen.

es geht sowohl mit Batch als auch mit VBS.
Weil es ein klassischer "search & replace"-Job mit etwas Regex ist, würde ich es mit sed machen.

lg
Member: miniversum
miniversum Jun 20, 2013 at 11:36:07 (UTC)
Goto Top
Hallo

Per Batch kannst du es mal damit versuchen:
@echo off

set in="Datei.txt"  
set out="Datei_neu.txt"  

set "z1="  
FOR /F "delims=" %%i in ('type %in%') do if not defined z1 set "z1=%%i"  
set "z2="  
FOR /F "skip=1 delims=" %%i in ('type %in%') do if not defined z2 set "z2=%%i"  
set "z3="  
FOR /F "skip=2 delims=" %%i in ('type %in%') do if not defined z3 set "z3=%%i"  

set pz2=%z2:~14%
set pz3=%z3:~3,11%

>%out% echo %z1%
>>%out% echo Q10%pz3%%pz2%
>>%out% echo %z3%
>>%out% more +3 %in%

In und out sind die zu lesende und die entstehende / veränderte Datei.

Gruß
...
Member: DerOri
DerOri Jun 20, 2013 at 11:57:21 (UTC)
Goto Top
Hallo Endoro, und Hallo Miniversum. Danke für eure Antworten:


Miniversum, deine Batch Funktioniert fast und wäre für mich dann schon ausreichend.

Das einzige was Sie noch falsch macht, ist das Sie

auf das Q10 aus Zeile:3 in Zeile:2 mit übernimmt, dort soll aber Q00 bleiben.
Member: miniversum
miniversum Jun 20, 2013 at 12:00:42 (UTC)
Goto Top
Das kannst du ändern in dem du Zeile 17 von
%out% echo Q10%pz3%%pz2%
zu
%out% echo Q00%pz3%%pz2%
änderst...
Member: DerOri
DerOri Jun 20, 2013 at 12:04:17 (UTC)
Goto Top
^^ Danke, hätte ich auch draufkommen können ;)

So weit passt dann alles.


Vielen Dank für die sehr schnelle Hilfe
Member: pieh-ejdsch
pieh-ejdsch Jun 20, 2013 at 12:06:03 (UTC)
Goto Top
moin DerOri,

ungetestet aus dem Handgelenk geschüttelt:

@echo off
setlocal disabledelayedexpansion

set "Input=D:\diepaar*.txt"  
set "OutputEXT=_neu.txt"  

for %%i in ("%input%") do call :read "%%~i"  

exit /b 0
:read
findstr /n . %1 > "%temp%\NR.tmp"  
>"%~dpn1%outputext%" (  
for /f "usebackqdelims=" %%a in ("%temp%\NR.tmp") do (  
 set "Line=%%a"  
 for /f "tokens1,*delims=:" %%N in ("%%a") do (  
  setlocal enabledelayedexpansion
  if %%N equ 2 (endlocal & set "Line2=%%M"  
  ) else if %%N equ 3 (echo !Line2:~0,3!!Line:~5,13!!Line2:~14!
   echo !Line:*:=!
  ) else echo !Line:*:=!
) )
)

Gruß Phil
Member: Endoro
Endoro Jun 20, 2013 at 12:10:41 (UTC)
Goto Top
Hab ich wieder den kleinsten face-sad
sed -r "2 {h;d}; 3 {H;s/[^:]*:.{3}(.{11}).*/\1/;G;s/(.*)\n([^:]*:.{3}).{11}/\2\1/m}" file  

traurige Grüsse face-smile