pepsmier
Goto Top

zeilenumbruch alle 20 zeichen in textdatei (als Batch in Win2k)

Text in einer txt-Datei besteht aus einer Zeile mit ca 200 Zeichen. In diesen Text soll alle 20 Zeichen ein Zeilenumbruch eingefügt werden. Die Ausgabe soll in einer neuen txt-Datei erscheinen.

Hallo,

ich habe folgendes Problem:
Ein Programm gibt einen Text in einer Textdatei aus. Dieser Text erscheint dann in der Datei eingabe.txt in einer Zeile ungefähr nach dem Muster:

"Adressat" "Das hier ist der Mustertext. Dieser soll nur für irgendetwas stehen" 01.01.2008 12:00:00,00

Jetzt soll eine Batchdatei dafür sorgen, dass der Inhalt der Datei eingabe.txt alle 20 Zeichen mit einem Zeilenumbruch versehen wird. Das Ergebnis soll in eine Datei ausgabe.txt geschrieben werden. Der Inhalt soll also folgendermaßen aussehen:

"Adressat" "Das hier
ist der Mustertext.
Dieser soll nur für
irgendetwas stehen"
01.01.2008 12:00:00
,00

(auf Worttrennung soll nicht geachtet werden, es soll nur exakt nach 20 Zeichen eine neue Zeile begonnen werden).
Ich habe in diesem Forum schon von einem Befehl "FOR /F" gelesen, jedoch verliefen meine Experimente damit nicht erfolgreich, da ich die Syntax noch nicht koplett verstehe. Kann mir jemand sagen, wie ich das Problem gelöst bekomme?

Hintergrund der ganzen Sache ist, dass ich eine Textdatei auf einem LC-Display ausgeben möchte, die nur 20 Zeichen Platz pro Zeile hat.

Ich habe schon mehrere Foren nach meinem Problem gesucht, jedoch bis auf "FOR /F" nicht annähernd die richtige Lösung gefunden. Wenn ich jedoch einen Artikel im Forum übersehen habe, so bitte ich um Nachsicht und Angabe des Links in diesem Thread.

Vielen Dank bis hierhin und viele Grüße

Pepsmier

Content-Key: 79271

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

Printed on: April 24, 2024 at 09:04 o'clock

Member: miniversum
miniversum Jan 27, 2008 at 18:00:59 (UTC)
Goto Top
Versuchs mal so:
@echo off
set /p text=<eingabe.txt
:cuttext
echo %text:~0,20%>>ausgabe.txt
set text=%text:~20%
if [%text%] neq  goto:cuttext

miniversum
Member: bastla
bastla Jan 27, 2008 at 18:29:51 (UTC)
Goto Top
Hallo pepsmier und willkommen im Forum!

Falls ein wenig temporäres VBScript (dieses kommt besser mit Sonderzeichen etc zurecht) nicht stört:
@echo off & setlocal
set "Ein=D:\Eingabe.txt"  
set "Aus=D:\Ausgabe.txt"  

set S20=%temp%\Split20.vbs
echo Set fso=CreateObject("Scripting.FileSystemObject"):Text=fso.OpenTextFile("%Ein%",1).ReadAll>%S20%  
echo Set Aus=fso.OpenTextFile("%Aus%",2,True):For i=1 To Len(Text) Step 20:Aus.WriteLine Mid(Text,i,20):Next:Aus.Close>>%S20%  
cscript //nologo %S20%
del %S20%
Alternativ könnten die ersten beiden Zeilen so aussehen:
set "Ein=%~1"  
set "Aus=%~dpn1-20%~x1"  
Damit könntest Du zB per Drag&Drop auf die Batchdatei aus zB "D:\Text.txt" die Datei "D:\Text-20.txt" erzeugen.

Grüße
bastla

[Edit] Alternative für Verwendung mit Parameter-Übergabe ergänzt. [/Edit]
Member: Biber
Biber Jan 27, 2008 at 20:03:19 (UTC)
Goto Top
Moin Pepsmier,

auch von mir willkommen im Forum.
Damit Du auch eine FOR /F -Variante in der Skizzensammlung hast, gehe ich mal von diesem Satz aus:
Ich habe in diesem Forum schon von einem Befehl "FOR /F" gelesen, jedoch verliefen meine Experimente damit nicht erfolgreich, da ich die Syntax noch nicht koplett verstehe. Kann mir jemand sagen, wie ich das Problem gelöst bekomme?
...und speichere den in der Datei "RaffINed.txt".
Mit diesem Schnipsel...
::------snipp split20.cmd
@echo off & setlocal enableDelayedExpansion
For /F "delims=" %%i in (RaffINed.txt) do (  
Set "Line=%%~i"   
For /L %%j in (0,20,180) do if "!line:~%%j,20!" NEQ "" @echo !line:~%%j,20!  
)
...erhältst Du
$cmd$split20.cmd
Ich habe in diesem F
orum schon von einem
 Befehl "FOR /F" gel  
esen, jedoch verlief
en meine Experimente
 damit nicht erfolgr
eich, da ich die Syn
tax noch nicht kople
tt verstehe. Kann mi
r jemand sagen, wie

Und Antworten auf die Frage nach der Syntax liefert am CMD-Prompt "FOR /?".

Grüße
Biber

[Edit Tippfehlerberichtigung 28.1.2008 Biber]
Member: pepsmier
pepsmier Jan 28, 2008 at 15:01:34 (UTC)
Goto Top
Hallo zusammen,

vorerst vielen Dank für die hilfreichen Beiträge. Die Lösung für mein Problem war schnell gefunden. Die Methode von miniversum habe ich ausprobiert. Die hat jedoch auf meinem System nicht funktioniert, vielleicht habe ich mich auch irgendwo vertan. Die Lösung von bastla mit VBScript verstehe ich zwar auch nicht im einzelnen (komme auch eher aus der java Ecke), jedoch hat diese sofort funktioniert.

Dankeschön an alle die sich mit dem Thema befasst haben und noch einen schönen Tag!

Grüße

Pepsmier
Member: bastla
bastla Jan 28, 2008 at 15:38:21 (UTC)
Goto Top
Hallo pepsmier!

Die Lösung von bastla mit VBScript verstehe ich zwar auch nicht im einzelnen
So können wir das hier nicht stehen lassen ...

Als (ausnahmsweise face-wink kommentiertes) VBScript sähe das so aus:
Set fso = CreateObject("Scripting.FileSystemObject")  
'Objekt für Zugriff auf das Dateisystem - schwer zu erraten ...  

Text = fso.OpenTextFile("%Ein%",1).ReadAll  
'Öffne die Datei %Ein% (wird beim Erstellen des Scripts durch den Inhalt der  
'	Batch-Variablen ersetzt) und lies den gesamten Inhalt in die Variable "Text" ein.  

Set Aus = fso.OpenTextFile("%Aus%",2,True)  
'Ausgabedatei (wieder lt Batch-Variable) zum Schreiben öffnen  

For i = 1 To Len(Text) Step 20
'Zählschleife von 1 bis "Textlänge" (= Zeichenanzahl des Textes) mit Schrittweite 20  

	Aus.WriteLine Mid(Text, i, 20)
	'Lies ab Position i des Textes 20 Zeichen (oder so viele, wie noch - am Ende des Textes -  
	'	vorhanden sind) und schreibe diese sowie einen Zeilenumbruch in die Ausgabedatei.  

Next
'Schleifenende  

Aus.Close
'Ausgabedatei schließen  
Dieses Script wird unter dem Namen "Split20.vbs" zur Laufzeit durch die Batchdatei im %Temp%-Verzeichnis erzeugt, über "cscript.exe" als Konsolenversion ausgeführt und wieder gelöscht.

Grüße
bastla