Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Durch Scanner erstellte .txt aufsplitten mit Batchdatei

Frage Entwicklung Batch & Shell

Mitglied: Sp3ll3

Sp3ll3 (Level 1) - Jetzt verbinden

12.08.2009, aktualisiert 12:27 Uhr, 3316 Aufrufe, 14 Kommentare

Hallo,

ich habe einen Scanner eingerichtet, der eine Textdatei mit folgendem Inhalt auswirft:

116934;10052009;1720.TXT

116934;3033968;;20;;;;;;;;;
116934;2843021;;1;;;;;;;;;
105206;2658390;;100;;;;;;;;;
105206;4930004;;10;;;;;;;;;
106228;4981043;;5;;;;;;;;;
106228;2740105;;500;;;;;;;;;


Das erste ist die Kundennummer, das zweite die Artikelnummer und das letzte die Anzahl. Diese TXT-Datei soll jetzt aufgeteilt werden in drei Stück jeweil nachdem sich die Kundennummer ändert:


116934;10052009;1720.TXT

116934;3033968;;20;;;;;;;;;
116934;2843021;;1;;;;;;;;;

und dann halt die nächste.

Jetzt bräuchte ich eine Batch-Datei die mir das abnimmt, da es hoher aufwand ist alles einzeln einzuscannen und abzuspeichern.

Besten dank im vorraus für die Antworten

Gruß
Mitglied: bastla
12.08.2009 um 12:43 Uhr
Hallo Sp3ll3 und willkommen im Forum!

Dein gewünschtes Ergebnis sind 3 Dateien mit folgenden Inhalten?
Datei1:
116934;10052009;1720.TXT 
 
116934;3033968;;20;;;;;;;;; 
116934;2843021;;1;;;;;;;;;
Datei2:
105206;2658390;;100;;;;;;;;; 
105206;4930004;;10;;;;;;;;;
Datei3:
106228;4981043;;5;;;;;;;;; 
106228;2740105;;500;;;;;;;;;
Wenn ja: Wie sollen diese Dateien heißen?

Grüße
bastla
Bitte warten ..
Mitglied: Sp3ll3
12.08.2009 um 13:08 Uhr
ja, das ist richtig.

der Name setzt sich wie folgt zusammen:

Kundennummer;Datum(ttmmjjjj);Uhrzeit(minminstdstd)

Danke für das willkommen heißen und die schnelle antwort.
Bitte warten ..
Mitglied: bastla
12.08.2009 um 13:18 Uhr
Hallo Sp3ll3!

Gemeint war eigentlich, unter welchem Namen die jeweiilige Teildatei gespeichert werden soll ...

Zusatzfrage: Wie ist bei Namenskollisionen vorzugehen (wenn also eine gleichnamige Datei bereits existieren sollte)?

Grüße
bastla
Bitte warten ..
Mitglied: Sp3ll3
12.08.2009 um 13:25 Uhr
Also die Teildatei soll das gleiche Namenformat tragen mit angepasster Kundennummer sprich:

116934;10052009;1720.TXT

105206;10052009;1721.TXT

usw..

Da jeder Kunde nur maximal einmal vorkommen kann (da die erzeugten TXT-Dateien nach Verarbeitung gelöscht werden) ist eine Namenskollision ausgeschlossen. Muss also nicht Berücksichtigt werden.

Gruß
Bitte warten ..
Mitglied: miniversum
12.08.2009 um 13:51 Uhr
Versuchs mal damit:
01.
@echo off 
02.
set "pfad=C:\Ordner" 
03.
 
04.
FOR /F "tokens=1,* delims=;" %%i in ('dir /b "%pfad%\*.txt"') do ( 
05.
ren "%pfad%\%%i;%%j" "%%i;%%j.tmp" 
06.
FOR /F "tokens=1,* delims=;" %%l in ('type "%pfad%\%%i;%%j.tmp"') do echo %%l;%%m>>"%pfad%\%%l;%%j" 
07.
REM del "%pfad%\%%i;%%j.tmp" 
08.
)
Wenn du das REM entfernst wird die ursprungsdatei gelöscht, sonst nru umbeenannt mit einem tmp als Anhang.
Bitte warten ..
Mitglied: bastla
12.08.2009 um 13:53 Uhr
Hallo Sp3ll3!

Wenn die Ausgangsdatei "116934;10052009;1720.TXT" heißt und sich aufgrund der ersten Kundennummer ebenfalls der Dateiname "116934;10052009;1720.TXT" (beides tatsächlich mit enthaltenen ";" ?) ergibt, müssten die Teildateien in einen anderen Ordner geschrieben werden, oder soll die Ausgangsdatei um die nicht zugehörigen Zeilen gekürzt werden?

Falls Letzteres, dann etwa so:
01.
@echo off & setlocal 
02.
set "AusgangsDatei=%~1" 
03.
set "Zielordner=%~dp1" 
04.
set "Bak=.bak" 
05.
for /f "tokens=1* delims=;" %%i in ("%~nx1") do set "Timestamp=%%j" 
06.
 
07.
move "%AusgangsDatei%" "%AusgangsDatei%%Bak%" 
08.
set "Zuletzt=$" 
09.
for /f "tokens=1* delims=:" %%i in ('findstr /n "^" "%AusgangsDatei%%Bak%"') do set "Zeile=%%j" & call :ProcessLine 
10.
 
11.
del "%AusgangsDatei%%Bak%" 
12.
goto :eof 
13.
 
14.
:ProcessLine 
15.
for /f "delims=;" %%a in ("%Zeile%") do set "KNr=%%a" 
16.
if "%KNr%"=="%Zuletzt%" goto :WriteLine 
17.
set "Zuletzt=%KNr%" 
18.
set "Datei=%Zielordner%%KNr%;%Timestamp%" 
19.
 
20.
:WriteLine 
21.
>>"%Datei%" echo\%Zeile% 
22.
goto :eof
Aufzurufen ist der Batch mit Übergabe der Ausgangsdatei, also etwa:
Aufteilen.cmd "D:\Ein Ordner\116934;10052009;1720.TXT"
Bei Bedarf lässt sich das natürlich auf Bearbeitung aller (".TXT"- ) Dateien im Ordner erweitern ...

Grüße
bastla
Bitte warten ..
Mitglied: Sp3ll3
12.08.2009 um 14:39 Uhr
Hi,

irgendwo vertue ich mich bei dem eintragen der Pfade:

Ursprungsordner: D:\TXT Splitter

Zielordner: D:\TXT Splitter\Ablage

Datei: D:\TXT Splitter\116934;10052009;1720.TXT

Mögt ihr mal eben schauen (schande über mein Haupt.. )
Bitte warten ..
Mitglied: bastla
12.08.2009 um 14:45 Uhr
Hallo Sp3ll3!

Zeile 3 (zu beachten ist der abschließende "\"):
set "Zielordner=D:\TXT Splitter\Ablage\" 
Außerdem wird angenommen, dass der Zielordner bereits existiert, ansonsten noch (jedenfalls vor Zeile 9) einfügen:
if not exist "%Zielordner%" md "%Zielordner%"
Aufruf des Batches:
Aufteilen.cmd "D:\TXT Splitter\116934;10052009;1720.TXT"
Grüße
bastla
Bitte warten ..
Mitglied: bastla
12.08.2009 um 14:57 Uhr
... Nachtrag: Wenn die Einzeldateien in einem anderen Ordner erstellt werden, ist das Umbenennen (und Löschen) der Ausgangsdatei nicht erforderlich, daher:
01.
@echo off & setlocal 
02.
set "AusgangsDatei=%~1" 
03.
set "Zielordner=%~dp1Ablage\" 
04.
 
05.
if not exist "%Zielordner%" md "%Zielordner%" 
06.
 
07.
for /f "tokens=1* delims=;" %%i in ("%~nx1") do set "Timestamp=%%j" 
08.
set "Zuletzt=$" 
09.
for /f "tokens=1* delims=:" %%i in ('findstr /n "^" "%AusgangsDatei%"') do set "Zeile=%%j" & call :ProcessLine 
10.
 
11.
goto :eof 
12.
 
13.
:ProcessLine 
14.
for /f "delims=;" %%a in ("%Zeile%") do set "KNr=%%a" 
15.
if "%KNr%"=="%Zuletzt%" goto :WriteLine 
16.
set "Zuletzt=%KNr%" 
17.
set "Datei=%Zielordner%%KNr%;%Timestamp%" 
18.
 
19.
:WriteLine 
20.
>>"%Datei%" echo\%Zeile% 
21.
goto :eof
In dieser Fassung wird der Zielordner automatisch als Unterordner "Ablage" des Ordners, in welchem die Ausgangsdatei liegt, erstellt und verwendet.

Grüße
bastla
Bitte warten ..
Mitglied: Sp3ll3
12.08.2009 um 15:00 Uhr
wir nähern uns dem Ende, allerdings klappts noch immer nicht wie müsste es denn komplett bei mir aussehen mit den angegebenen Pfaden?
Bitte warten ..
Mitglied: bastla
12.08.2009 um 15:15 Uhr
Eigentlich wie gleich oberhalb ...

Grüße
bastla
Bitte warten ..
Mitglied: Sp3ll3
12.08.2009 um 15:41 Uhr
Er sagt mir das die angegebene Umgebungsoption nicht gefunden wurde und spuckt mir dann folgenden Teil aus:

findstr /n "^" "%AusgangsDatei%"') do set "Zeile=%%j" & call :ProcessLine

goto :eof


:ProcessLine

for /f "delims=;" %%a in
Bitte warten ..
Mitglied: bastla
12.08.2009 um 15:55 Uhr
Hallo Sp3ll3!

Kann ich nicht nachvollziehen - könntest Du kurz beschreiben, wie Du getestet hast?

Bei mir funktioniert jedenfalls die (aus dem per "Quelltext" aufgerufenen Fenster kopierte) gepostete Version mit folgender Quelldatei "116934;10052009;1720.TXT":
01.
116934;10052009;1720.TXT 
02.
 
03.
116934;3033968;;20;;;;;;;;; 
04.
116934;2843021;;1;;;;;;;;; 
05.
105206;2658390;;100;;;;;;;;; 
06.
105206;4930004;;10;;;;;;;;; 
07.
106228;4981043;;5;;;;;;;;; 
08.
106228;2740105;;500;;;;;;;;;
Kannst Du das bitte mit der gleichen Vorgangsweise (den gleichen Daten) bei Dir prüfen?

Grüße
bastla
Bitte warten ..
Mitglied: Sp3ll3
12.08.2009 um 16:11 Uhr
Habe den Fehler schon gefunden, danke jetzt funktioniert es.. war ein Rechtschreibfehler..

Besten Dank
Bitte warten ..
Ähnliche Inhalte
Heiß diskutierte Inhalte
Router & Routing
Tipps für Router (ca. 100 clients, VPN) (18)

Frage von oel-auge zum Thema Router & Routing ...

TK-Netze & Geräte
gelöst Convert von TAPI auf CAPI gesucht (13)

Frage von StefanKittel zum Thema TK-Netze & Geräte ...