hoomer
Goto Top

Textverarbeitung per Batch - Trennzeichen einfügen

Hallo, ich bin neu in diesem Forum, habe ein Problem und hoffe das mir jemand helfen kann.

Als Datenaustausch zwischen 2 Systemen wird eine txt-Datei erzeugt die mehrere hundert Zeilen enthält, die wiederum alle exakt 64 Zahlen enthalten.

In diesem Zahlenblock, sind keinerlei Trennzeichen enthalten, die allerdings für den Import in das 2. System notwendig sind.

Nun ist die Frage wie ich, am besten in dem Batch-Skript, Trennzeichen (Semikolon) an definierbare stellen einfügen lassen kann.

Definierbar deshalb, weil die zu trennenden Blöcke unterschiedlich viele Zahlen enthalten, diese aber pro Zeile gleich sind.

Ich hoffe mich klar und verständlich ausgedrückt zu haben.

PS: Ich habe in diversen Foren, auch in diesem, gesucht - aber dieses Problem leider nirgends finden können und hoffe das mir hier jemand helfen kann.

Content-ID: 109914

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

Ausgedruckt am: 22.11.2024 um 20:11 Uhr

bastla
bastla 24.02.2009 um 21:28:10 Uhr
Goto Top
Hallo hoomer und willkommen im Forum!

Schematisch (und ungetestet) etwa so (unter der Voraussetzung, dass alle Zeilen verarbeitet werden sollen und sich keine "!" in den Daten befinden):
@echo off & setlocal enabledelayedwxpansion
set "Alt=D:\Datei.txt"  
set "Neu=D:\Datei.csv"  

if exist "%Neu%" del "%Neu%"  
for /f "usebackq delims=" %%i in ("%Alt%") do (  
    set "Z=%%i"  
    >>"%Neu%" echo !Z:~0,8!;!Z:~8,5!;!Z:~13,8!;!Z:~21,4!;...  
)
Die Zerlegung der Zeile (Variable !Z!) in Zeile 8 basiert auf der Angabe der Anzahl zu überspringender Zeichen (Offset) und der Anzahl zu verwendender Zeichen - siehe dazu die Onlinehilfe mit "set /?" (dort gezeigt für %PATH%).

Grüße
bastla
hoomer
hoomer 25.02.2009 um 08:27:48 Uhr
Goto Top
Perfekt - danke für die schnelle Hilfe!!!!!

Gruß

Hoomer
hoomer
hoomer 25.02.2009 um 12:34:14 Uhr
Goto Top
Ich muss dieses Thema nochmals aufgreifen.
Als ich also gerade voller elan dabei war dieses Skript zu implementieren habe ich vor lauter schreck (mangels Information) festgestellt das die exportierte Datei aus System1 an mehreren Stellen Leerzeichen enthält, diese müssen entfernt werden, sonst scheitert der Import in System2.
Nun ist es dank der Hilfe von - bastla - , dafür nochmals danke - so das eine sauber getrennte Datei vorliegt die in etwa folgendem Muster entspricht:

163654;1165; 361456;243213153;
Das Endergebnis, damit der Import erfolgreich funktioniert muss so aussehen
163654;1165;361456;243213153;

Ich hoffe das mir nochmal jemand helfen kann.

PS: Habe schon diverse dinge mit der Funktion findstr probiert, komme aber irgendwie nicht ganz klar damit.
miniversum
miniversum 25.02.2009 um 12:53:35 Uhr
Goto Top
Ändere die Zeile 8 um in diese beiden Zeilen:
set z=!Z:~0,8!;!Z:~8,5!;!Z:~13,8!;!Z:~21,4!;...
>>"%Neu%" echo !Z: =!  

miniversum
hoomer
hoomer 04.03.2009 um 07:50:37 Uhr
Goto Top
Ich habe diesen Beitrag zwar schon als gelöst markiert, muss dieses Thema jetzt aber nochmals aufgreifen.

Das jetzige Skript sie so aus

@echo off & setlocal enabledelayedexpansion
set "INPUT=C:\INPUT.txt"
set "OUTPUT=C:\OUTPUT.txt"
if exist "%OUTPUT%" del "%OUTPUT%"
for /f "usebackq delims=" %%i in ("%INPUT%") do (
set "Z=%%i"
set z=!Z:~0,8!;!Z:~8,5!;!Z:~13,8!;!Z:~21,4!;!Z:~25,20!;!Z:~45,69!;
"%OUTPUT%" echo !Z: =!)

funktioniert Klasse!

Jetzt hat sich noch als Problem ergeben das ich bestimmte Zahlenbereiche löschen muss, bzw. definieren muss das diese nicht mit in die Output.txt übernommen werden.
Als Beispiel sollen die Zahlen 13-20 der Input.txt übersprungen werden.

Ich hoffe das das mittels Skript möglich ist und das mir jemand sagen kann wie.

Besten dank an alle die sich dieses "gelösten" Problems nochmals annehmen.

hoomer
bastla
bastla 04.03.2009 um 09:16:51 Uhr
Goto Top
Hallo hoomer!

Wenn Du mit "Zahlen" bestimmte Felder meinst, müsste es doch genügen, den entsprechenden Teil, etwa
!Z:~102,8!;
in der Zeile 8 weg zu lassen...

Grüße
bastla
hoomer
hoomer 04.03.2009 um 09:32:06 Uhr
Goto Top
Manchmal sitzt man vor einem Problem und kommt einfach nicht auf das naheligendste.

Klar, du hast ja recht.

Ich muss das o.g. Skript zunächst abwandeln, das Leerzeichen als Zeichen behandelt werden und das Ergebnis in einer Datei Zwischenspeichern. Damit habe ich eine Datei mit Leerzeichen, in der die definierten Blöcke nicht mehr erscheinen. Danach lasse ich das Skript über die zwischengespeicherte Datei laufen und fertig.

Super - DANKE.

hommer