Auswerten einer .txt per Batchprogrammierung

klausriedelcdp

Cadet 1st Year
Registriert
März 2015
Beiträge
12
Hallo liebe Batch-Profis,

ich habe folgendes Problem: Ich möchte die untenstehende .txt-Datei per Batchprogramm so auswerten, dass innerhalb des Programms Variablen mit dem Namen der Konstante (z.B. "TITLE_1", "TITLE_2", "DRAWING") erzeugt werden. Diese sollen anschliessend mit dem Ausdruck, der als nächstes in der Zeile steht (z.B. "V-Einsatz, oben", "066897", usw. belegt werden.

Die Variablen verwende ich anschließend im Programm weiter.
Ich habe schon einige kleine Batch-Programme geschrieben, habe aber nur ein "gefährliches Halbwissen" und beisse mir an dieser Aufgabe die Zähne aus. Bitte gebt mir einen Stubs in die richtige Richtung :-)

Danke vorab!

Gruß, Klaus

Die Datei könnt ihr dem Anhang entnehmen. Sie wird leider beim Anzeigen in diesem Fenster nicht richtig angezeigt.
 

Anhänge

  • 250900_par.txt
    24,4 KB · Aufrufe: 294
Zuletzt bearbeitet:
Das einfachste ist, die verkürzt die Datei auf die relevanten Informationen. Also den rechten Teil und die Überschriften weg. z.B. mit einem Texteditor, der spaltenweise arbeiten kann oder auch mit Excel.
 
die Textdatei wird, so wie sie ist, aus einem CAD-Program "ausgespuckt" und ich möchte die Datei direkt weiterverarbeiten. Manuelles Editieren würde zuviel Aufwand bedeuten.

Am Ende soll das ganze automatisiert Stammdaten in SAP erzeugen...

Aber kürzen macht natürlich Sinn. Wie könnte ich per Batch die Zeilen ab dem 54 Zeichen Abschneiden?
Und am besten Zeile 2-5, 7-10,usw... komplett löschen?
 
Zuletzt bearbeitet:
Dann sollte die Verarbeitung auch mit ABAP erfolgen. Oder mit LSMW. Ist da eigentlich nur eine kleine Sache.
Da hast Du ganz andere Möglichkeiten, als mit Batch Gebastel.
 
Das Problem ist, das ich aus meiner CAD-Software am besten Batch oder exe-Dateien ansprechen kann. Mit ABAP oder LSMW kenne ich mich leider gar nicht aus.
 
Da du in dem File keinen eindeutigen Trenner zwischen den Spalten hast, wird das schwer bis unmöglich mit einem Batchscript. Ansonsten könnte man das z.B. so lösen:

Code:
for /f "tokens=2 delims= " %%i in ('findstr /c:"TITLE_1" 250900_par.txt') do set TITLE_1=%%i
echo %TITLE_1%
 
Wenn die Datei bzw. die Informationen sowieso im SAP landen, mußt Du ja eine Import Routine in SAP haben. Also wozu an zwei Stellen arbeiten.

Ich denke mal, Ihr wollt Stücklisten aufbauen oder Materialtexte?
 
Das erzeugen der Stammdaten wird im SAP durch den Scriprecorder realisiert. Der kann wiederum per batch angetriggert werden, nach dem die Batchdatei die gefundenen Parameter aus der .txt dem SAP-Script "untergeschoben" hat. Ist ein bisschen kompliziert, aber mit simplen Mitteln zu erreichen und es kostet nichts ;-)
 
Du meinst wahrscheinlich den Batch Input Recorder?

Der erzeugt ja ein Programm, welches Du bearbeiten kannst. Wenn Du weder in Batch noch in ABAP fit bist, empfehle ich dennoch die Einarbeitung in ABAP.
 
In SAP ist das unter "Scriptaufzeichnung und Playback" zu finden (Alt+F12) Ich denke wir meinen das gleiche.
Ergänzung ()

Hallo Bauers,

das gefällt mir schon ganz gut. Wirklich sauber geht es nur mit Semikolon als Trennung. Diese müssten sich aber doch erzeugen lassen.
Kannst Du mir zeigen wie ich an Stelle (Zeichen) 33 und 55 in jeder Zeile ein Semikolon erzeuge?
Dann sollten sich die Parameter finden und sauber befüllen lassen.

Gruß
 
Zuletzt bearbeitet:
Ich hatte einen Denkfehler, nachdem deine Spalten gleich breit sind könnte man das auch so lösen:

Code:
@echo off
for /f "delims=" %%i in ('findstr /c:"TITLE_1" 250900_par.txt') do set TITLE_1=%%i
set TITLE_1=%TITLE_1:~32,21%
echo %TITLE_1%
 
Zuletzt bearbeitet:
Hi,
also mit Batch wird das Mordaufwand, ich hab bisschen Gebastelt, es verarbeitet jedoch nur den ersten Abschnitt
Code:
@echo off & setlocal enabledelayedexpansion & title %~n0
cls

set "Datei=250900_par.txt"
set "temp=temp.txt"
set "temp2=temp2.txt"

pushd %~dp0

for /f "skip=5 tokens=1 delims=" %%i in (%Datei%) do (
    set a=%%i
    for /f "tokens=1 delims=:" %%x in ("!a!") do set x=%%x
    echo !x!
)>>%temp% 2>nul
for /f "tokens=1,2 delims=:" %%i in ('findstr /n  $ %temp%') do @(
        for /L %%a in (1,5,120) do @if %%i==%%a @echo %%j& @echo %%j>>%temp2%
)
for /f "tokens=1* delims=" %%k in (%temp2%) do @(
    set k=%%k
    set k=!k:~0,-9!
    @echo !k!>>Ausgabe.txt
)
del %temp% %temp2%
pause
 
@ Bauers
Das ist perfekt. Ich glaube ich habe es sogar fast verstanden :-). Mit set TITLE_1=%TITLE_1:~32,21% schneidest du den gewünschten wert aus der vorher eingelesen Zeile heraus, ist das richtig?

Ich kann den Code jetzt entsprechend ergänzen (s.u.) und mit die Werte aus der txt nach belieben herausziehen.

Tausend Dank an alle, die geantwortet haben. Ihr habt mir etliche Tage Verzweiflung erspart :-) (und wahrscheinlich hätte ich am Ende nicht etwas derart schlankes bekommen)

@echo off

for /f "delims=" %%i in ('findstr /c:"TITLE_1" 250900_par.txt') do set TITLE_1=%%i

set TITLE_1=%TITLE_1:~32,21%

echo %TITLE_1%


for /f "delims=" %%i in ('findstr /c:"TITLE_2" 250900_par.txt') do set TITLE_2=%%i

set TITLE_2=%TITLE_2:~32,21%

echo %TITLE_2%


for /f "delims=" %%i in ('findstr /c:"ABMESSUNG" 250900_par.txt') do set ABMESSUNG=%%i

set ABMESSUNG=%ABMESSUNG:~32,21%

echo %ABMESSUNG%

pause
 
klausriedelcdp schrieb:
@ Bauers
Das ist perfekt. Ich glaube ich habe es sogar fast verstanden :-). Mit set TITLE_1=%TITLE_1:~32,21% schneidest du den gewünschten wert aus der vorher eingelesen Zeile heraus, ist das richtig?

Nicht nur fast, du hast es richtig verstanden :)

klausriedelcdp schrieb:
Tausend Dank an alle, die geantwortet haben. Ihr habt mir etliche Tage Verzweiflung erspart :-) (und wahrscheinlich hätte ich am Ende nicht etwas derart schlankes bekommen)

Macht man doch gerne, wenn man jemanden eine Freude damit machen kann.
 
Hallo
ich benötige nocheinmal Eure Hilfe!

ich muss aus einer .txt-Datei alle leeren Zeilen entfernen um Sie weiterverarbeiten zu können.
Ich habe folgendes versucht (stl.txt im Anhang):

FOR /F "delims=" %%f IN (stl.txt) DO echo %%f >> sap_stl.txt

und auch

FOR /F "delims=|" %%f IN (stl.txt) DO echo %%f >> sap_stl.txt

Führt eider alles zu diesem Ergebnis:

Pos. MengeSachnummerZeichnungsnr. Benennung Abmessung Werkstoff
Baugruppe:243425 378493 EGR-Schmieden M89
ECHO ist ausgeschaltet (OFF).
1 1 375302 391100 WZH 5000, kompl.
ECHO ist ausgeschaltet (OFF).
2 2 388241 182760 Bolzen, zwischen
ECHO ist ausgeschaltet (OFF).
3 1 398403 398400 V.-Gesenk, kompl.
ECHO ist ausgeschaltet (OFF).
4 1 355322 Auswerferbolzen für VG
ECHO ist ausgeschaltet (OFF).
5 1 398413 398414 F.-Gesenk, kompl.
ECHO ist ausgeschaltet (OFF).
6 1 342693 Auswerferbolzen, kompl. für F.-G.
ECHO ist ausgeschaltet (OFF).

Soll so aussehen:

Pos. MengeSachnummerZeichnungsnr. Benennung Abmessung Werkstoff
Baugruppe:243425 378493 EGR-Schmieden M89
1 1 375302 391100 WZH 5000, kompl.
2 2 388241 182760 Bolzen, zwischen
3 1 398403 398400 V.-Gesenk, kompl.
4 1 355322 Auswerferbolzen für VG
5 1 398413 398414 F.-Gesenk, kompl.
6 1 342693 Auswerferbolzen, kompl. für F.-G.

Bitte um Hilfe.

LG, Klaus
 

Anhänge

  • stl.txt
    1,5 KB · Aufrufe: 92
Nachdem du bereits die Leerzeilen in "ECHO ist ausgeschaltet (OFF)." umgewandelt hast,
kannst du diese mit findstr herausfiltern.
findstr /v "ECHO ist ausgeschaltet (OFF)." DeineDatei > NeueDatei
 
Hat funktioniert! Gute Idee, werde ich mir merken.

Vielen Dank!
Ergänzung ()

Guten Morgen,

ich habe leider ein Problem festgestellt, welches ich mir nicht ganz erklären kann.

Ich benutze den Code von r0b0t:

findstr /v "ECHO ist ausgeschaltet (OFF)." stl.txt > sap_stl.txt

Aus irgendeinem Grund wird eine Zeile (Nr.2) nicht übertragen, die KEIN "ECHO ist ausgeschaltet (OFF)." enthält.

Kann mir Jemand helfen? Ich weiss mir keinen Rat mehr..
Vielen Dank schonmal.

Inhalt stl.txt:

Pos. MengeSachnummerZeichnungsnr. Benennung Abmessung Werkstoff
Baugruppe:250999 123123 blablub 1.1234.05
ECHO ist ausgeschaltet (OFF).
1 1 182751 Ausw.-Bolzen/ejector bolt
ECHO ist ausgeschaltet (OFF).
2 1 195550 195544 Distanzstueck
ECHO ist ausgeschaltet (OFF).
3 1 355312 Stauchdruck, kompl.
ECHO ist ausgeschaltet (OFF).


Inhalt sap_stl.txt:

Pos. MengeSachnummerZeichnungsnr. Benennung Abmessung Werkstoff
Baugruppe:250999 123123 blablub 1.1234.05
1 1 182751 Ausw.-Bolzen/ejector bolt
3 1 355312 Stauchdruck, kompl.
 

Anhänge

  • sap_stl.txt
    383 Bytes · Aufrufe: 67
  • stl.txt
    602 Bytes · Aufrufe: 107
Sorry für das Problem. Ich hatte das /c: vergessen. Die korrekte Syntax muss lauten:

findstr /v /c:"ECHO ist ausgeschaltet (OFF)."

Sonst sucht er nach den einzelnen Wörtern und findet im Wort "Distanzstueck" das Wort "ist".
 
Ahhhhh Ok. Ich hatte sogar mal /c Probbiert aber hatte wohl den Doppelpunkt vergessen. Ich löse es jetzt so, dass ich einfach nur jede 2 Zeile übertrage. Die Erste benötige ich nämlich ohnehin nicht. :-)

Dennoch vielen Dank für die Hilfe. Vielleicht benötige ich die funktion noch einmal an anderer Stelle...
 
Hallo Leute,

ich würde gern noch einmal Eure Hilfe in Anspruch nehmen. Es geht um ein Ähnliches Problem wie oben.
ich möchte Zeilenweise eine .csv-Datei (als txt im Anhang, muss in .csv umbenannt werden) auslesen und jeweils den String nach dem dritten Kommata in eine Variable schreiben, die so heißt wie der String am Anfang jeder Zeile.


Mein Ansatz. Erstmal nur für Zeile zwei... funzt aber nicht. %TITLE_1% scheint leer zu sein.

@echo off

for /f "usebackq tokens=1-9 delims=," %%a in ("Datei.csv") do (if "%%a"=="TITLE_1" set "TITLE_1=%%c")

echo %TITLE_1%

pause

Inhalt csv.datei:

Name,Typ,Wert,Ausweisen,Zugriff,Quelle,Beschreibung,Eingeschränkt,Einheitenmenge,Einheit
TITLE_1,Zeichenfolge,V-Gesenk unten 066759,Yes,Voll,Benutzerdefiniert,,,,
TITLE_2,Zeichenfolge,66759,Yes,Voll,Benutzerdefiniert,,,,
DRAWING,Zeichenfolge,250760,No,Voll,Benutzerdefiniert,,,,
ABMESSUNG,Zeichenfolge,635 x 420 x 790,No,Voll,Benutzerdefiniert,,,,
PTC_MATERIAL_NAME,Zeichenfolge,STAHL,No,Voll,Benutzerdefiniert,,OK,,
WERKSTOFF,Zeichenfolge,1.2714.05,No,Voll,Benutzerdefiniert,,,,
MC_DIMENSION,Zeichenfolge,635.00 x 420.00 x 790.00,No,Voll,Benutzerdefiniert,,,,
Ergänzung ()

Vielleicht ist es schlauer hierzu ein neues Thema zu eröffnen...
 

Anhänge

  • Datei.txt
    1,1 KB · Aufrufe: 110
Zurück
Oben