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

Spalten in einer .csv anders anordnen oder tauschen

Frage Entwicklung Batch & Shell

Mitglied: Underdog81

Underdog81 (Level 1) - Jetzt verbinden

17.03.2011 um 12:34 Uhr, 6226 Aufrufe, 13 Kommentare

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
Mitglied: bastla
17.03.2011 um 12:43 Uhr
Hallo Underdog81 und willkommen im Forum!

Sollte etwa so zu machen sein (ungetestet):
01.
@echo off & setlocal 
02.
set "TXT=D:\Test.txt" 
03.
set "CSV=D:\Test.csv" 
04.
 
05.
del "%CSV%" 2>nul 
06.
for /f "usebackq tokens=1,2* delims=;" %%i in ("%TXT%") do >>"%CSV%" echo %%j;%%i;%%k
Grüße
bastla
Bitte warten ..
Mitglied: Underdog81
17.03.2011 um 14:12 Uhr
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
Bitte warten ..
Mitglied: bastla
17.03.2011 um 14:32 Uhr
Hallo Underdog81!

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

Grüße
bastla
Bitte warten ..
Mitglied: Underdog81
17.03.2011 um 15:00 Uhr
Aber dafür ist ein Forum doch da
User helfen User

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

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
Bitte warten ..
Mitglied: bastla
17.03.2011 um 15:53 Uhr
Hallo Underdog81!

Dann zB:
01.
@echo off & setlocal 
02.
set "Ordner=D:\Scannerdaten" 
03.
 
04.
pushd "%Ordner%" 
05.
for /f "delims=" %%d in ('dir /b /a-d *.txt') do ( 
06.
    del "%%~nd.csv" 2>nul 
07.
    for /f "usebackq tokens=1,2* delims=;" %%i in ("%%d") do >>"%%~nd.csv" echo %%j;%%i;%%k 
08.
    del "%%d" 
09.
10.
popd
[Edit]
[ungetestet]

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

Grüße
bastla
Bitte warten ..
Mitglied: Underdog81
18.03.2011 um 09:14 Uhr
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
Bitte warten ..
Mitglied: Biber
18.03.2011 um 09:26 Uhr
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
Bitte warten ..
Mitglied: Underdog81
18.03.2011 um 09:35 Uhr
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
Bitte warten ..
Mitglied: Underdog81
18.03.2011 um 15:59 Uhr
Nun habe ich schon wieder ein Problem

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
Bitte warten ..
Mitglied: Underdog81
18.03.2011 um 16:03 Uhr
Zitat von Underdog81:
Nun habe ich schon wieder ein Problem

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
Bitte warten ..
Mitglied: Biber
18.03.2011 um 16:09 Uhr
Moin Underdog81.

Zitat von Underdog81:
Nun habe ich schon wieder ein Problem
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]
Bitte warten ..
Mitglied: bastla
18.03.2011 um 16:10 Uhr
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
Bitte warten ..
Mitglied: Underdog81
19.03.2011 um 23:32 Uhr
Zitat von Biber:
Moin Underdog81.

> Zitat von Underdog81:
> ----
> Nun habe ich schon wieder ein Problem
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
Bitte warten ..
Neuester Wissensbeitrag
CPU, RAM, Mainboards

Angetestet: PC Engines APU 3a2 im Rack-Gehäuse

(1)

Erfahrungsbericht von ashnod zum Thema CPU, RAM, Mainboards ...

Ähnliche Inhalte
Batch & Shell
gelöst PowerShell: Spalten tauschen und neue Spalten in CSV datei erzeugen (16)

Frage von Rippchen zum Thema Batch & Shell ...

Batch & Shell
gelöst Auslesen bestimmter Spalten aus csv (6)

Frage von Berti82 zum Thema Batch & Shell ...

Batch & Shell
CSV Stapelverarbeitung mit Filterfunktion für große Datenmengen (8)

Frage von Rippchen zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
DSL, VDSL
DSL-Signal bewerten (13)

Frage von SarekHL zum Thema DSL, VDSL ...

Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (13)

Frage von JayyyH zum Thema Switche und Hubs ...

Windows Server
Mailserver auf Windows Server 2012 (9)

Frage von StefanT81 zum Thema Windows Server ...

Backup
Clients als Server missbrauchen? (9)

Frage von 1410640014 zum Thema Backup ...