ballos
Goto Top

Txt-Datei Zeilenumbruch nach Stelle X

Hiho,

ich habe folgendes Problem.

Ich habe eine Textdatei mit einem Variablen langen Inhalt. Diese Datei wird automatisch erstellt und kann in der Länge vaariieren.

Nun möchte ich gerne immer nach Stelle 380 einen Zeilenumbruch.

Ich habe hier schon etwas gestöbert und folgenden Beitrag gefunden, der meinem Problem sehr ähnlich ist:

@echo off & setlocal
set "File=C:\Test.txt"  
set "bak=.bak"   
set "Ins=00"   

set S=%temp%\IZ.vbs
> %S% echo Set fso=CreateObject("Scripting.FileSystemObject")  
>>%S% echo F=WScript.Arguments(0)
>>%S% echo T=Split(fso.OpenTextFile(F).ReadAll,vbLF)
>>%S% echo For i=0 To UBound(T)-1:T(i)="%Ins%"^&T(i):Next  
>>%S% echo fso.CreateTextFile(F,True).Write Join(T,vbLF)

copy "%File%" "%File%%bak%">nul  
cscript //nologo %S% "%File%"  

Quelle: mit batch in txt datei an bestimmter stelle werte einfügen


Nun ist meine Frage.

1. Wo stelle ich ein, nach welcher Stelle das ganze passieren soll ?
2. Was muss ich nehmen um statt "00" einen Zeilenumbruch zu erhalten ?


Bin für jede Hilfe dankbar, da ich an den beiden Stellen irgendwie nicht mehr weiterkomme.

gruss
BalloS

Content-ID: 176020

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

Ausgedruckt am: 22.11.2024 um 22:11 Uhr

bastla
bastla 09.11.2011 um 16:41:38 Uhr
Goto Top
Hallo BalloS!

Das Script passt nicht so ganz zu Deiner Vorgabe, da hier der einzufügende Teil jeweils an den Anfang einer Zeile gesetzt wird (und auch keine Windows-Zeilenschaltungen verwendet werden) - versuch es daher mit diesem (ungetesteten) Ansatz:
@echo off & setlocal
set "File=C:\Test.txt"  
set "bak=.bak"   
set "L=380"   

set S=%temp%\IZ.vbs
> %S% echo Set fso=CreateObject("Scripting.FileSystemObject")  
>>%S% echo F=WScript.Arguments(0)
>>%S% echo T=Split(fso.OpenTextFile(F).ReadAll,vbCrLf)
>>%S% echo For i=0 To UBound(T):T(i)=Left(T(i),%L%)^&vbCrLf^&Mid(T(i),%L%+1):Next
>>%S% echo fso.CreateTextFile(F).Write Join(T,vbCrLf)

copy "%File%" "%File%%bak%">nul  
cscript //nologo %S% "%File%"  
Grüße
bastla
BalloS
BalloS 09.11.2011 um 17:46:21 Uhr
Goto Top
Hi,

danke. Aber leider funktioniert dies auch nicht.

Er erstellt die Backupdatei, aber das wars. Leider habe ich nicht so viel Verständnis, dass ich es selber korrigieren könnte.

gruss
BalloS
bastla
bastla 09.11.2011 um 18:10:18 Uhr
Goto Top
Hallo BalloS!

Inzwischen habe ich das Script, und zwar mit Erfolg, getestet ...

Wo liegt denn die Testdatei bei Dir, und welches BS verwendest Du? Teste mit einer Datei in einem Ordner, in dem Du sicher Schreibrechte hast ...

Grüße
bastla
BalloS
BalloS 09.11.2011 um 19:22:20 Uhr
Goto Top
Hallo,

hab die Datei im Root einer Partition liegen, wo ich auf jeden Fall Schreibrechte habe.

OS ist Win7 64bit, es soll aber später auf Win XP 32bit laufen.


Und es funktioniert nicht. Es zerteilt die Datei zwar teilweise in 380 Zeichen lange Zeilen. Leider nicht komplett.

Manche Zeilen sind kürzer, manche sind immernoch so lang, wie vorher. Es werden willkürlich Leerezilen oder Zeilen mit 2-5 Zeichen gesetzt.


Vielleicht muss ich mehr zur Ausgangsdatei sagen.

Es ist eine Text Datei mit einer Zeilenlänge bis 10.000 Zeichen. Dies können alle Zeichen sein, die im DOS-Zeichensatz zur Verfügung stehen. Leerzeichen sind in diesem Fall ebenfalls Zeichen, die gezählt werden müssen. Es kann auch sein, dass eine Zeile mal kürzer ist, aber die nächste dann wieder 10.000 Zeichen lang ist.

Diese Datei soll nun aufgeteilt werden. Und zwar in eine Datei, wo jede Zeile gefüllt ist und jede Zeile immer 380 Zeichen lang ist.


Das Script soll also die Ursprungsdatei abarbeiten und immer 380 Zeichen nehmen, in eine Zeile schreiben, dann die nächsten 380 Zeichen nehmen und in der neuen Datei in die zweite Zeile schreiben, usw....


gruss
BalloS
bastla
bastla 09.11.2011 um 20:08:11 Uhr
Goto Top
Hallo BalloS!
Es zerteilt die Datei zwar teilweise in 380 Zeichen lange Zeilen. Leider nicht komplett.
klingt aber etwas anders als
Er erstellt die Backupdatei, aber das wars.
und von Umbruch nach jeweils 380 Zeichen war vorher jedenfalls nicht die Rede ...

... anyhow - versuch es mit: folgender Zeile 10:
>>%S% echo For i=0 To UBound(T):TL="": For j =1 To Len(T(i)) Step %L%:TL=TL^&vbCrLf^&Mid(T(i),j,%L%):Next:T(i)=Mid(TL,3):Next
Grüße
bastla
BalloS
BalloS 10.11.2011 um 11:37:47 Uhr
Goto Top
Also es funktioniert nun. Sehr gut sogar :D

Vielen Dank