underdog81
Goto Top

Spalten in einer .csv anders anordnen oder tauschen

Hallo ich habe mich jetzt hier im Forum angemeldet und hoffe, hier hilfe für mein Problem zu bekommen.
Leider habe ich noch nie mit Batch gearbeitet und in den letzten Tagen einige kleine selber erstellt die auch wunderbar laufen.
Doch ich habe das Gefühle, dass die Nummer etwas zu gross ist für mich. (bis jetzt)

Nun mein Anliegen

Unser Handscanner gibt eine Textdatei aus die so aussieht.

00001;Artikel;4040056003842;2;2.0;15.03.2011
00001;Artikel;4040056003743;2;1.0;15.03.2011
00001;Artikel;4040056002173;2;7.0;15.03.2011
00001;Artikel;4040056040854;2;5.0;15.03.2011
00001;Artikel;4040056040311;2;3.0;15.03.2011
00001;Artikel;4040056040335;2;8.0;15.03.2011
00001;Artikel;4040056040823;2;14.;15.03.2011
00001;Artikel;4040056020283;2;3.0;15.03.2011
00001;Artikel;4040056020429;2;1.0;15.03.2011
00001;Artikel;4040056002036;2;1.0;15.03.2011

Die 00001 steht für das Lager und kann auch eine andere Nummer enthalten.
Artikel Ist eine Angabe die immer in Feld 2 steht.

Nun müss ich das ganze in eine .csv Datei haben und den Inhalt der Spalte 1 in Spalte 2 haben und den Inhalt der Spalte 2 ind 1 haben.

das ändern der Dateiendung ist kein Problem, aber wie bekommt man die Spalten getauscht?

copy Test.txt Text.csv bewirkt lediklich nur, dass eine kopie der Test.txt in Test.csv angelegt wird.
Die Dateien können alle im gleichem Ordner liegen bleiben.

Hoffe ich habe mich verständlich ausgedrückt und nichts wichtiges vergessen.

Underdog81

Content-Key: 162850

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

Printed on: May 7, 2024 at 07:05 o'clock

Member: bastla
bastla Mar 17, 2011 at 11:43:57 (UTC)
Goto Top
Hallo Underdog81 und willkommen im Forum!

Sollte etwa so zu machen sein (ungetestet):
@echo off & setlocal
set "TXT=D:\Test.txt"  
set "CSV=D:\Test.csv"  

del "%CSV%" 2>nul  
for /f "usebackq tokens=1,2* delims=;" %%i in ("%TXT%") do >>"%CSV%" echo %%j;%%i;%%k  
Grüße
bastla
Member: Underdog81
Underdog81 Mar 17, 2011 at 13:12:02 (UTC)
Goto Top
Wow das ging ja richtig schnell hier und dann auch noch eine Perfekte Vorlage.
ich muss schon sagen "Hut ab"
Ich musste lediglich bei
02.set "TXT=D:\Test.txt"
03.set "CSV=D:\Test.csv"
den Pfad D: anpassen.

Ich bedanke mich herzlich und hoffe in diesem Forum auch anderen helfen zu können.

Underdog81
Member: bastla
bastla Mar 17, 2011 at 13:32:00 (UTC)
Goto Top
Hallo Underdog81!

Freut mich - dass es für Dich passt, aber mehr noch: Deine Einstellung face-smile

Grüße
bastla
Member: Underdog81
Underdog81 Mar 17, 2011 at 14:00:09 (UTC)
Goto Top
Aber dafür ist ein Forum doch da face-wink
User helfen User

Da du mich schon so verwöhnt hast frage ich einfach mal nach einen Nachschlag face-smile

set "TXT=D:\Test.txt"

Da steht ja jetzt nimm die Datei Test.txt und arbeite damit.
Wie schreibt man es wenn ich jede .txt aus dem Ordner in die .csv umwandel möchte und danach löschen die .txt löschen soll.

Da man im Programm zum Auslesen des Handscanner sagen kann, dass die Datei nun nicht Test.txt sondern etwa Lager1.txt oder 1234.txt heist müsste die Zeile ja anders sein.
Damit er nicht unmengen an unterschiedlichen .txt Dateien im Ordner hat soll er die zuletzt verarbeitete Löschen.

für mehr anregung bin ich natürlich offen aber ich Antworte erst wieder morgen, da ich jetzt erst mal was anderes machen muss.


Underdog81
Member: bastla
bastla Mar 17, 2011 at 14:53:52 (UTC)
Goto Top
Hallo Underdog81!

Dann zB:
@echo off & setlocal
set "Ordner=D:\Scannerdaten"  

pushd "%Ordner%"  
for /f "delims=" %%d in ('dir /b /a-d *.txt') do (  
    del "%%~nd.csv" 2>nul  
    for /f "usebackq tokens=1,2* delims=;" %%i in ("%%d") do >>"%%~nd.csv" echo %%j;%%i;%%k  
    del "%%d"  
)
popd
[Edit]
[ungetestet] face-wink

... jetzt aber korrigiert ...
[/Edit]

Grüße
bastla
Member: Underdog81
Underdog81 Mar 18, 2011 at 08:14:46 (UTC)
Goto Top
Guten morgen Bastla

Ich hab das ganze mal probiert, aber er entfernt nur die endung .txt und das war es auch schon. So schein es auf dem ersten Blick

Als ich am der .bat ein "Pause" (ohne " ) eingefügt und "echo on" (ohne " ) schrieb sah ich, dass er alles machte.
Fast alles denn ich hatte ja jetzt eine Datei ohne Endung.
Nach kurzer denkpause war es klar, die endung muss jetzzt .csv sein und somit habe ich das händisch gemacht.
Treffer! Die anordnung der Tabellen war wie gewollt nur fehlt einfach das .csv am ende.

Ich denke du kannst mir sagen was ich ändern muss.

Underdog81
Member: Biber
Biber Mar 18, 2011 at 08:26:15 (UTC)
Goto Top
Moin Unterhund81,

ändert sich das Verhalten der Batchdatei, wenn du das " >>%%~nd" in Zeile 7 änderst in ">>%%~nd.csv" ?

Da hatte bastla eventuell vergessen, ein "[ungetestet]" unter den Schnipsel zu setzen.

Grüße
Biber
Member: Underdog81
Underdog81 Mar 18, 2011 at 08:35:07 (UTC)
Goto Top
Bombe das war die Lösung !!

dann hoffe ich mal, dass ich mich erkentlich zeigen kann.
In diesem Sinne wünsche ich dir noch einen schönen Tag.
Besten Dank

Underdog81
Member: Underdog81
Underdog81 Mar 18, 2011 at 14:59:00 (UTC)
Goto Top
Nun habe ich schon wieder ein Problem face-sad

Ich habe mit der Firma unseres Warenwirtschaftprogramm Telefoniert un die sagten mir, dass diniges anders muss.

Das ist die Ausgangsdatei als .txt
00001;Artikel;4040056003842;2;2.0;15.03.2011
00001;Artikel;4040056003743;2;1.0;15.03.2011
00001;Artikel;4040056002173;2;7.0;15.03.2011
00001;Artikel;4040056040854;2;5.0;15.03.2011
00001;Artikel;4040056040311;2;3.0;15.03.2011
00001;Artikel;4040056040335;2;8.0;15.03.2011
00001;Artikel;4040056040823;2;14.;15.03.2011
00001;Artikel;4040056020283;2;3.0;15.03.2011
00001;Artikel;4040056020429;2;1.0;15.03.2011
00001;Artikel;4040056002036;2;1.0;15.03.2011

Hier muss nun Spalte 3 (barcode)als Spalte 1
und Spalte 2 soll gelöscht werden.Und Spalte 1 wird dann die 2te Spalte

Der Rest bleibt und das muss dann eine .csv werden.

So soll es danach aussehen

4040056003842;00001;2;2.0;15.03.2011
4040056003743;00001;2;1.0;15.03.2011
4040056002173;00001;2;7.0;15.03.2011
4040056040854;00001;2;5.0;15.03.2011
4040056040311;00001;2;3.0;15.03.2011
4040056040335;00001;2;8.0;15.03.2011
4040056040823;00001;2;14.;15.03.2011
4040056020283;00001;2;3.0;15.03.2011
4040056020429;00001;2;1.0;15.03.2011
4040056002036;00001;2;1.0;15.03.2011

Ich hoffe es ist nicht nervend, dass ich immer mehr serviert haben will.
Am liebsten wäre eine beschreibung womit ich selber eine .bat bauen kann.
Aber so langsam komme ich dahinter was wofür ist.


Underdog81
Member: Underdog81
Underdog81 Mar 18, 2011 at 15:03:11 (UTC)
Goto Top
Zitat von @Underdog81:
Nun habe ich schon wieder ein Problem face-sad

Ich habe mit der Firma unseres Warenwirtschaftprogramm Telefoniert un die sagten mir, dass diniges anders muss.

Das ist die Ausgangsdatei als .txt
00001;Artikel;4040056003842;2;2.0;15.03.2011
00001;Artikel;4040056003743;2;1.0;15.03.2011
00001;Artikel;4040056002173;2;7.0;15.03.2011
00001;Artikel;4040056040854;2;5.0;15.03.2011
00001;Artikel;4040056040311;2;3.0;15.03.2011
00001;Artikel;4040056040335;2;8.0;15.03.2011
00001;Artikel;4040056040823;2;14.;15.03.2011
00001;Artikel;4040056020283;2;3.0;15.03.2011
00001;Artikel;4040056020429;2;1.0;15.03.2011
00001;Artikel;4040056002036;2;1.0;15.03.2011

Hier muss nun Spalte 3 (barcode)als Spalte 1
und Spalte 2 soll gelöscht werden.Und Spalte 1 wird dann die 2te Spalte

Der Rest bleibt und das muss dann eine .csv werden.

So soll es danach aussehen

4040056003842;00001;2;2.0;15.03.2011
4040056003743;00001;2;1.0;15.03.2011
4040056002173;00001;2;7.0;15.03.2011
4040056040854;00001;2;5.0;15.03.2011
4040056040311;00001;2;3.0;15.03.2011
4040056040335;00001;2;8.0;15.03.2011
4040056040823;00001;2;14.;15.03.2011
4040056020283;00001;2;3.0;15.03.2011
4040056020429;00001;2;1.0;15.03.2011
4040056002036;00001;2;1.0;15.03.2011

Ich hoffe es ist nicht nervend, dass ich immer mehr serviert haben will.
Am liebsten wäre eine beschreibung womit ich selber eine .bat bauen kann.
Aber so langsam komme ich dahinter was wofür ist.

EDIT: ich habe einfach mal etwas versucht und habe aus der 2 eine 3 gemacht und es hat geklappt.

alt -> for /f "usebackq tokens=1,2* delims=;" %%i in ("%%d") do >>"%%~nd.csv" echo %%j;%%i;%%k
neu -> for /f "usebackq tokens=1,3* delims=;" %%i in ("%%d") do >>"%%~nd.csv" echo %%j;%%i;%%k
Underdog81

Member: Biber
Biber Mar 18, 2011 at 15:09:39 (UTC)
Goto Top
Moin Underdog81.

Zitat von @Underdog81:
Nun habe ich schon wieder ein Problem face-sad
Na ja, einigen wir uns auf die Formulierung "ich habe schon wieder eine neue Anforderung".
Ein bisschen mit Batch rumalbern ist etwas anderes, als sich um Probleme zu kümmern.
Mach also bitte nicht so viel Wind damit. Wir antworten auch so

Am liebsten wäre eine beschreibung womit ich selber eine .bat bauen kann.

Diese Beschreibung findest du in zwei Schritten
a) die Hilfe "FOR /?" am CMD-Prompt, und da die FOR /F und "token"-Beschreibung
b) und wenn sich dein Blutdruck danach wieder gesenkt hat hier im Forum bei einer Suche nach "FOR-Tutorial" und unzähligen FOR/F-Basteleien - einfach die Suchfunktion benutzen.

Wenn wenn wenn es DANN nicht klappt, dann nochmal nachhaken.
Aber eine Stunde Vorsprung bekommst du erstmal.


Grüße
Biber

[Edit] uups...schon erledigt... Schönes Wochenende @Underdog81 [/Edit]
Member: bastla
bastla Mar 18, 2011 at 15:10:40 (UTC)
Goto Top
Hallo Underdog81!
ich habe einfach mal etwas versucht und habe aus der 2 eine 3 gemacht und es hat geklappt.
Damit Du auch weißt, warum:
Die "tokens" sind die Teile der Zeile (= Spalten oder Felder der CSV), die durch Zerlegung anhand des/r Trennzeichen/s "delims" entstehen, wobei die Angabe "1,3*" bedeutet: Nimm Spalte 1, Spalte 3 und alles danach, ohne weiter zu zerlegen, und stelle die Teile in der Reihenfolge "%%i", "%%j", "%%k" zur Verfügung ...

Grüße
bastla
Member: Underdog81
Underdog81 Mar 19, 2011 at 22:32:56 (UTC)
Goto Top
Zitat von @Biber:
Moin Underdog81.

> Zitat von @Underdog81:
> ----
> Nun habe ich schon wieder ein Problem face-sad
Na ja, einigen wir uns auf die Formulierung "ich habe schon wieder eine neue Anforderung".
Ein bisschen mit Batch rumalbern ist etwas anderes, als sich um Probleme zu kümmern.
Mach also bitte nicht so viel Wind damit. Wir antworten auch so

> Am liebsten wäre eine beschreibung womit ich selber eine .bat bauen kann.

Diese Beschreibung findest du in zwei Schritten
a) die Hilfe "FOR /?" am CMD-Prompt, und da die FOR /F und "token"-Beschreibung
b) und wenn sich dein Blutdruck danach wieder gesenkt hat hier im Forum bei einer Suche nach "FOR-Tutorial" und
unzähligen FOR/F-Basteleien - einfach die Suchfunktion benutzen.

Wenn wenn wenn es DANN nicht klappt, dann nochmal nachhaken.
Aber eine Stunde Vorsprung bekommst du erstmal.


Grüße
Biber

[Edit] uups...schon erledigt... Schönes Wochenende @Underdog81 [/Edit]

hab es ja selber durch testen hinbekommen und konnt mir schon denken dass Token die Spalten sind.
Die erklärung von Baslta ist eigendlich das was ich erwartet habe und nicht eine derartige Antwort wie deine.
Und ja ich habe die FAQ habe ich schon gelesen doch leider habe ich die For schleife bist jetzt nicht verstanden.

Ich will ja nicht die Lösung sondern nur Ansätze oder oder erklärungen wieso ich jetzt was schreiben muss.
Ich habe nie verlangt die Lösung serviert zu bekommen.

@Biber
Bitte nich falsch verstehen, ich nutze gerne mein Hirn wenn ich die Grundformeln verstanden habe.

Underdog81