weltklasse
Goto Top

Textdatei: Datensätze zusammenfügen

Hallo,

ich habe eine Textdatei mit 300.000 Datensätzen.

ID | Artikel | Textfeld
a1   ab123   xxx5
a1   ab123   34wwwwwww
a1   ab123   999sss555777999
b3   x1egr    dddfffggg
c5   4a44     rrrrr88888uuuuu
c5   4a44     qqqqrr
c5   4a44     123333
c5   4a44     rrr777

Das Ergebnis soll in eine separate Datei geschrieben werden und so aussehen:

=============================================================
ID | Artikel | Textfeld
a1   ab123   xxx5, 34wwwwwww, 999sss555777999
b3   x1egr    dddfffggg
c5   4a44     rrrrr88888uuuuu, qqqqrr, 123333, rrr777
Kann mir jemand bei dem Code helfen???

Content-Key: 219771

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

Printed on: May 23, 2024 at 00:05 o'clock

Member: Budders
Budders Oct 18, 2013 updated at 08:41:44 (UTC)
Goto Top
Hallo weltklasse,

ich habe ein ähnliches Programm geschrieben das aus einer liste im Format
 
lagerplatz
artikel
lagerplatz
...
das folgende Format macht
lagerplatz artikel bestand


ich könnte mir vorstellen, dass mit ein paar Modifikationen damit ein Programm das für dich richtig ist erzeugt werden kann.
Ich habe gerade etwas viel zu tun daher stell ich dir einfach mal den kompletten Code unbearbeitet zur Verfügung, vielleicht bringt dich das ja weiter.
Mein Code ist bereits kommentiert also hoffe ich dass du dich darin gut zurecht findest face-smile

http://pastebin.com/hHXP2VT5

Ansonsten gehe ich davon aus, dass die hier ansässigen Experten eine tolle Lösung für dich bereit haben :p

MfG Budders
Member: weltklasse
weltklasse Oct 18, 2013 at 10:14:12 (UTC)
Goto Top
Vielen Dank für den Link.

Sorry, aber leider bin ich nicht so fit um den Code auf meine Bedürfnisse umzuwandeln.

Kann mir da vielleicht jemand helfen?

Vielen Dank.
Member: bastla
bastla Oct 18, 2013 updated at 11:01:17 (UTC)
Goto Top
Hallo weltklasse und willkommen im Forum!

Da Du weder die Trennung der einzelnen Felder, noch deren Inhalt näher beschrieben hast, ein Ansatz der (bis auf die Tatsache, dass Leerzeichen als Trennzeichen betrachtet werden und daher führende Leerzeichen - wie zB vor "dddfffggg" - auf der Strecke bleiben) mit Deinen angegebenen Beispieldaten funktioniert:
@echo off & setlocal
set "Ein=D:\DieDatei.txt"  
set "Aus=D:\DieneueDatei.txt"  

set "Zeile=ID ^| Artikel ^| Textfeld"  

del "%Aus%" 2>nul  
for /f "usebackq skip=1 tokens=1,2*" %%a in ("%Ein%") do call :ProcessLine %%a %%b "%%c"  
>>"%Aus%" echo %Zeile%  
goto :eof

:ProcessLine
if "%1%2" neq "%Zuletzt%" (  
    >>"%Aus%" echo %Zeile%  
    set "Zeile=%1 %2 %~3"  
    set "Zuletzt=%1%2"  
) else (
    set "Zeile=%Zeile%, %~3"  
)
goto :eof
Grüße
bastla
Member: weltklasse
weltklasse Oct 18, 2013 at 11:17:27 (UTC)
Goto Top
Entschuldigung. Die Felder der Datei sind mit TAB-Schritt voneinander getrennt.
Member: bastla
bastla Oct 18, 2013 updated at 13:55:50 (UTC)
Goto Top
Hallo weltklasse!

Dann eher so:
@echo off & setlocal
set "Ein=D:\DieDatei.txt"  
set "Aus=D:\DieneueDatei.txt"  

set "Zeile=ID	Artikel	Textfeld"  

del "%Aus%" 2>nul  
for /f "usebackq skip=1 tokens=1,2* delims=	" %%a in ("%Ein%") do call :ProcessLine %%a %%b "%%c"  
>>"%Aus%" echo %Zeile%  
goto :eof

:ProcessLine
if "%1%2" neq "%Zuletzt%" (  
    >>"%Aus%" echo %Zeile%  
    set "Zeile=%1	%2	%~3"  
    set "Zuletzt=%1%2"  
) else (
    set "Zeile=%Zeile%,%~3"  
)
goto :eof
Die Zeilen 5, 8 und 15 verwenden jetzt TAB als Trennzeichen (delimiter). In Zeile 18 musst Du selbst entscheiden, ob nach dem Komma ein Leerzeichen folgen soll oder (wie in der aktuellen Fassung) nicht ...

Grüße
bastla
Member: weltklasse
weltklasse Oct 21, 2013 at 06:10:37 (UTC)
Goto Top
Hallo bastla,

vielen Dank für Deine Lösung. Klappt super.
Da zeigt es sich, wer wirklich Ahnung hat.