josken69
Goto Top

Woher kommen überzählige Blanks in der Ausgabedatei

Hallo,
ich habe folgendes Script, welches eine Ursprungsdatei umwandeln soll und die Zeilen mit Blanks bis zu einer gewissen Position auffüllen soll. Dabei werden in der Ausgabedatei aber am Anfang ein Blank und am Ende 2 Blanks zuviel rausgeschrieben.
Kann mir jemand den Grund nennen?
Hier mein Script:

@echo off & setlocal 
Set "File=c:\Alone\input.txt"  
Set "NewFile=c:\Alone\output.txt"  
if exist "%NewFile%" del "%NewFile%"  
set "Blanks=                                                                                                    "  
for /f "usebackq delims=" %%i in ("%File%") do set "zeile=%%i%Blanks%" & call :ProcessLine   
Goto :eof 
:ProcessLine
Set "zeile=%zeile:&=§%"   
set "zeile=%zeile:~0,128%   
Set "lineOut=%zeile:§=^&%"   
Echo >>"%NewFile%" %lineOut%   
goto :eof


Ich häng mal zwei Screenshots der Input und output-Datei an. (Kann man hier auch files hochladen?)
8a77ece991c57feab3cc5f7144303d70-input
76742de4129612effdb911ceb499e853-output

Vielen Dank

Content-ID: 129164

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

Ausgedruckt am: 17.11.2024 um 00:11 Uhr

60730
60730 11.11.2009 um 17:07:45 Uhr
Goto Top
Servus,

das sieht nach Biber / Bastla aus...

Aber - ob einer der beiden in Zeile 5 das " vergessen hat?

mach mal eines rein..
Gruß
bastla
bastla 11.11.2009 um 17:32:38 Uhr
Goto Top
Hallo josken69!
Kann man hier auch files hochladen?
Das nicht, aber für Textdateien bietet es sich an, sie (auszugsweise) unter Vewendung der -Formatierung zu posten ...

Die Ausgabedatei lt Screenshot sieht ja eigentlich ganz manierlich aus - ist aber wohl der "Soll"-Zustand ...

Grüße
bastla
Biber
Biber 11.11.2009 um 18:15:08 Uhr
Goto Top
Moin josken69,

mindestens eines der überzähligen Leerzeichen ist erklärlich durch den "Echo"-Befehl in Zeile 12

Und die %Blank%-Variable würde ich so umbenennen, dass (dir) beim späteren Lesen wieder einfällt, was da drin ist.

Also skizziert und ungetestet so:
@echo off & setlocal 
Set "File=c:\Alone\input.txt"  
Set "NewFile=c:\Alone\output.txt"  
if exist "%NewFile%" del "%NewFile%"  
set "Blanks100=                                                                                                    "  
for /f "usebackq delims=" %%i in ("%File%") do set "zeile=%%i%Blanks100%" & call :ProcessLine   
Goto :eof 
:ProcessLine
Set "zeile=%zeile:&=§%"   
set "zeile=%zeile:~0,128%   
Set "lineOut=%zeile:§=^&%"   
Echo %lineOut%>>"%NewFile%"  
REM Zeile 12-alt: Echo >>"%NewFile%" %lineOut%    
goto :eof
[Zeile 12-alt hatte 1 Leerzeichen vor den ">>" und 2 nach %lineOut%]

Grüße
Biber
josken69
josken69 12.11.2009 um 09:03:50 Uhr
Goto Top
Hallo und vielen Dank,
damit sind die überzähligen Blanks entfernt. Jetzt habe ich aber noch ein neues Problem. In der ersten Zeile wird das letzte Zeichen abgeschnitten und der CRLF kommt in Position 127. Warum passiert das denn??
Wenn ich den Wert in der Zeile Set "zeile=%zeile:~0,128% auf 129 ändere kommen alle CRLFs auf die gleiche Position, auch in Zeile 1. Und bei 128 kürzt er mir in der ersten Zeile die letzte Position weg.
Hier der Input
 
0128ALK3333331000000000Company & Co Name          011009    02228899000000000000               03302009                        1
0245C30070010200411440001141878000000000000005000 0000000000033333310227255700000000060273   Mustermann, Max
Company Immergleich        LEV 10.09 NR.1111.1.0001.011  0202MIETSOLL OKTOBER 2009      02FÄLLIGER BETRAG **100,73 EU
0245C30070010300101112507656700000000000000005000 0000000000033333310227255700000000042126   Musterfrau, Maxi
Company Immergleich        LEV 10.09 NR.2222.2.0002.022  0202MIETSOLL OKTOBER 2009      02FÄLLIGER BETRAG **200,26 EU
0245C30070010300101112802372300000000000000005000 0000000000033333310227255700000000081390   Schmitz, HEINZ
Company Immergleich        LEV 10.09 NR.3333.3.0003.033  0202MIETSOLL OKTOBER 2009      02FÄLLIGER BETRAG **300,90 EU
0245C30070010300209000402600286000000000000005000 0000000000033333310227255700000000002500   Meier, JOERG
Company Immergleich        LEV 10.09 NR.4444.4.0004.044  0202MIETSOLL OKTOBER 2009      02FÄLLIGER BETRAG ***25,00 EU
0245C30070010300209000602440214000000000000005000 0000000000033333310227255700000000060895   Müller, HEINZ-PETER

und hier dann der Output
 
0128ALK3333331000000000Company & Co Name          011009    02228899000000000000               03302009                        
0245C30070010200411440001141878000000000000005000 0000000000033333310227255700000000060273   Mustermann, Max                    
Company Immergleich        LEV 10.09 NR.1111.1.0001.011  0202MIETSOLL OKTOBER 2009      02FÄLLIGER BETRAG **100,73 EU           
0245C30070010300101112507656700000000000000005000 0000000000033333310227255700000000042126   Musterfrau, Maxi                   
Company Immergleich        LEV 10.09 NR.2222.2.0002.022  0202MIETSOLL OKTOBER 2009      02FÄLLIGER BETRAG **200,26 EU           
0245C30070010300101112802372300000000000000005000 0000000000033333310227255700000000081390   Schmitz, HEINZ                     
Company Immergleich        LEV 10.09 NR.3333.3.0003.033  0202MIETSOLL OKTOBER 2009      02FÄLLIGER BETRAG **300,90 EU           
0245C30070010300209000402600286000000000000005000 0000000000033333310227255700000000002500   Meier, JOERG                       
Company Immergleich        LEV 10.09 NR.4444.4.0004.044  0202MIETSOLL OKTOBER 2009      02FÄLLIGER BETRAG ***25,00 EU           
0245C30070010300209000602440214000000000000005000 0000000000033333310227255700000000060895   Müller, HEINZ-PETER                
Company Immergleich        LEV 10.09 NR.5555.5.0005.055  0202MIETSOLL OKTOBER 2009      02FÄLLIGER BETRAG **400,95 EU           
0128E     0000005000000000000000000054921601951000000038869346630000004902348                                                   

Company Immergleich        LEV 10.09 NR.5555.5.0005.055  0202MIETSOLL OKTOBER 2009      02FÄLLIGER BETRAG **400,95 EU
0128E     0000005000000000000000000054921601951000000038869346630000004902348
bastla
bastla 12.11.2009 um 13:59:00 Uhr
Goto Top
Hallo josken69!

Zunächst hatte ich das "&" in Verdacht - da aber bereits vor der Rückkonvertierung von "§" nach "^&" die Länge festgelegt wird, konnte es dann doch nicht daran liegen.

Dann fiel mir aber noch die "1" unmittelbar am Ende der ersten Zeile auf - und da ">>" nur eine Kurzform der Schreibweise "1>>" darstellt (Umleitung der Ausgabe auf Kanal 1 = STDOUT), gehe ich davon aus, dass diese 1 als Bestandteil eben dieser Umleitung interpretiert wurde.

Mit der folgenden Schreibweise der Zeile 12
<code type="plain"">>>"%NewFile%" Echo %lineOut%
sollte es dann eigentlich klappen ...

Grüße
bastla
Biber
Biber 12.11.2009 um 14:19:09 Uhr
Goto Top
Moin bastla,

jepp, das dürfte es sein.
Für ganz Ängstliche könnte die Zeile 12 nochmal umgestaltet werden, um auch noch trailing blanks nach %lineout% auszuschliessen:

>>"%NewFile%" (Echo %lineOut%)
[natürlich ungetestet]

Grüße
Biber
josken69
josken69 13.11.2009 um 08:13:26 Uhr
Goto Top
Hallo zusammen,
jep, das war's. Ich bedanke mich herzlich und wünsche eine schönes Wochenende.
Gruß Josh