markuskirchler
Goto Top

Text zeilenweise per Batch auslesen und anpassen bzw. umsortieren

Hallo liebe Experten,

ich bin zwar ein recht erfahrener Administrator, aber mit Batch-Programmierung hatte ich bisher kaum etwas zu tun und werde es auch in Zukunft kaum haben, deshalb komme ich heute mit einer Bitte/Anfrage zu euch, die in den Foren nicht gern gesehen ist, aber mir fehlt einfach die Zeit, mich komplett in die Batchprogrammierung einzulesen. Vielleicht kann mir einer von euch Experten doch etwas helfen, zumindest das Grundgerüst des Programmes zusammenzustellen, nur gewisse Anpassungen würde ich dann sicher selber hinbekommen.

Die Problemstellung: Ich habe eine Stempeluhr, die mir ein txt-File generiert, das beliebig lang sein kann. Dieses txt-File müsste ich etwas umstruktieren, um es in mein Lohnbuchhaltungsprogramm einfügen zu können.

Meine Ausgangslage ist diese:
2816710662461201182609
2816710662461201182909
2819710662461202160409
2819710662471202160409

Aufgeteilt:
2816 71066 246 12 01 18 26 09
2816 = Userkodex
71066 = Firmenkodex (ist irrelevant)
246 = Eingang
247 = Austritt
12 = Monat
01 = Tag
18 = Stunde
26 = Minute
09 = Jahr


Jetzt bräuchte ich die Daten aber so:
01110207470000070000E09
01110207530000010000E09
01110207530000120000E09

Aufgeteilt:
01 11 02 07 47 000007 0000 E 09

01 = Firmenkodex (bleibt immer 01)
11 = Monat
02 = Tag
07 = Stunde
47 = Minute
000007 = Userkodex (ich habe hierbei eine "Übersetzungsliste", welche mir z. B. sagt: Userkodex 2816 im neuen File ist Userkodex 000007 im alten File. Hier müsste man also ein paar IF's einbauen)
0000 = Fülldaten, bleiben immer 0000
E = Eingang (gleiches Spiel hier: IF 246 then "E" elseif 247 then "U")
U = Austritt
09 = Jahr

Denkt ihr jemand bekommt das für mich hin? Wäre euch echt dankbar!!

Wenn ich noch irgendetwas klären muss, könnt ihr natürlich gerne jederzeit fragen.

Schöne Grüße aus dem verschneiten Südtirol

Markus

Content-Key: 130797

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

Printed on: April 19, 2024 at 20:04 o'clock

Member: Miyamoto
Miyamoto Dec 02, 2009 at 16:33:24 (UTC)
Goto Top
Hi,
das muste doch das sein was du haben willst
@ECHO OFF & setlocal enabledelayedexpansion 

for /f %%i in (D:\test.txt) do (
echo %%i

	set eingangsstring=%%i

	set userkodex=!eingangsstring:~0,4!
	set firmenkodex=!eingangsstring:~4,5!
	set eingang=!eingangsstring:~9,3!

	set monat=!eingangsstring:~12,2!
	set tag=!eingangsstring:~14,2!
	set stunde=!eingangsstring:~16,2!
	set minute=!eingangsstring:~18,2!
	set jahr=!eingangsstring:~20,2!

	set neuerstring=01!monat!!tag!!stunde!!minute!

	REM hier deine entscheidungstabenlle

	set neuerstring=!neuerstring!____0000
        REM ___ ist Platzhalter für den fehlenden wert.
	if "!eingang!" == "246" (  
		set neuerstring=!neuerstring!E
	)
	if "!eingang!" == "247" (  
		set neuerstring=!neuerstring!U
	)
	
	set neuerstring=!neuerstring!!jahr!
echo !neuerstring!
echo.

echo !neuerstring! >> D:\test2.txt
)
Member: MarkusKirchler
MarkusKirchler Dec 02, 2009 at 16:47:28 (UTC)
Goto Top
Hui, das scheint es schon zu 90% zu sein. Jetzt nur noch die IF für meinen String, eine Abfrage ob das File existiert und die alten Daten löschen, sobald sie im neuen File drinnen sind und alles da face-smile

Ich danke dir vielmals, ich denke jetzt schaffe ich es allein, vielen Dank für die kompetente Hilfe =)

PS: Ich lasse den Thread noch offen, sollte noch eine Frage auftauchen, sobald alles komplett ist markiere ich ihn als gelöst.

Markus
Member: MarkusKirchler
MarkusKirchler Dec 03, 2009 at 14:16:44 (UTC)
Goto Top
Hallo nochmal,

also ich hab das Programm jetzt soweit fertig, nur noch ein Problem hab ich. Und zwar hängt mir das Programm bei meinem definitiven File dann immer noch ein Leerzeichen hinten an jede Zeile dran und das mag das Lohnbuchhaltungsprogramm nicht. Wie bekomme ich dieses dämliche letzte Leerzeichen bloß weg?

Mein Programmcode:
@ECHO OFF & setlocal enabledelayedexpansion 

for /f %%i in (C:\Programme\Datafox\DATAFO~1.27\Export\Zeitstempel.txt) do (
echo %%i

	set eingangsstring=%%i

	set userkodex=!eingangsstring:~0,4!
	set firmenkodex=!eingangsstring:~4,5!
	set eingang=!eingangsstring:~9,3!

	set monat=!eingangsstring:~12,2!
	set tag=!eingangsstring:~14,2!
	set stunde=!eingangsstring:~16,2!
	set minute=!eingangsstring:~18,2!
	set jahr=!eingangsstring:~20,2!

	set neuerstring=01!monat!!tag!!stunde!!minute!

	REM MITARBEITERTABELLE
	
	if "!userkodex!" == "2824" (  
		set userkodex=000001
	)
	if "!userkodex!" == "2818" (  
		set userkodex=000003
	)
	if "!userkodex!" == "2821" (  
		set userkodex=000004
	)
	if "!userkodex!" == "2828" (  
		set userkodex=000005
	)
	if "!userkodex!" == "2827" (  
		set userkodex=000007
	)
	if "!userkodex!" == "2817" (  
		set userkodex=000008
	)
	if "!userkodex!" == "2822" (  
		set userkodex=000009
	)
	if "!userkodex!" == "2816" (  
		set userkodex=000011
	)
	if "!userkodex!" == "2825" (  
		set userkodex=000013
	)
	if "!userkodex!" == "2829" (  
		set userkodex=000014
	)
	if "!userkodex!" == "2819" (  
		set userkodex=000015
	)
	if "!userkodex!" == "2823" (  
		set userkodex=000017
	)
	if "!userkodex!" == "2815" (  
		set userkodex=000018
	)
	if "!userkodex!" == "2830" (  
		set userkodex=000020
	)

	set neuerstring=!neuerstring!!userkodex!

	set neuerstring=!neuerstring!0000

	if "!eingang!" == "246" (  
		set neuerstring=!neuerstring!E
	)
	if "!eingang!" == "247" (  
		set neuerstring=!neuerstring!U
	)
	
	set neuerstring=!neuerstring!!jahr!
echo !neuerstring!
echo.

echo !neuerstring! >> "\\server\DATAFIL.txt"  
)

REM HIER ALTE DATEI LEEREN
copy /y NUL "C:\Programme\Datafox\DATAFO~1.27\Export\Zeitstempel.txt" >NUL  
Member: Biber
Biber Dec 03, 2009 at 14:21:11 (UTC)
Goto Top
Moin MarkusKirchler,

Wie bekomme ich dieses dämliche letzte Leerzeichen bloß weg?
Schreibe es einfach gar nicht erst.

Und verwende bitte in Zukunft Codeformatierung.

Danke
Biber
Member: MarkusKirchler
MarkusKirchler Dec 03, 2009 at 14:28:19 (UTC)
Goto Top
Hallo Biber,

sorry, die Codeformatierung habe ich gesucht, aber leider nicht gefunden. Wie ist die hier am Board? [code] [/code]?

Zum Thema: Ich schreibe aber ja gar kein Leerzeichen in den String, das letzte Zeichen ist ja die Variable Jahr und die beinhaltet nur "09" und sonst nichts. Oder mach ich da was falsch?

Danke für die Hilfe!
Markus
Member: MarkusKirchler
MarkusKirchler Dec 03, 2009 at 14:30:35 (UTC)
Goto Top
Ach Mist, darauf hätte ich auch selber kommen können, dass ich das so machen muss:
!neuerstring!>>"\\srv01\sistemi\PROFIS2\TIMA\DATAFIL.txt"  
Jetzt klappt es face-smile Vielen Dank für den Wink mit dem Zaunpfahl!

Markus
Member: Miyamoto
Miyamoto Dec 03, 2009 at 14:38:44 (UTC)
Goto Top
Hi,
die Tags für die Formatierung stehen alle im den FAQs
Formatting instructions in the posts

Gruß Miyamoto
Member: Biber
Biber Dec 03, 2009 at 15:14:48 (UTC)
Goto Top
Moin MarkusKirchler,

Zitat von @MarkusKirchler:
Ach Mist, darauf hätte ich auch selber kommen können, dass ich das so machen muss:
Keine Sorge - hier im Forum gebe ich gerne jedem die Zeit, selbst darauf zu kommen... face-wink

Konservativ wie ich bin, halte ich doch mehr von "nachhaltigem Lernen" als von diesem neumodischen RTL-Supernanny-pimp-my-life-Gelumpe.

Wenn du trotz Adventszeit noch etwas Gutes tun magst: Gehe noch ein letztes Mal auf deinen vorvorletzten Kommentar, "Editiere" ihn und probiere die bei uns im Forum vorgesehene < code > </ code > -Formatierung (ohne Leerzeichen) aus.

Danke und schönen Nachmittag
Biber