Lesen aus einer csv-Datei und das extrahieren bestimmter Daten-Spalten basierend auf den ersten Spaltenwert
Dies ist meine erste batch Programm und ich habe die Suche online, aber immer noch kämpfen, zu schreiben-up eine Lösung.
Habe ich folgende CSV-Datei:
"RH",2013/06/15 02:14:58 -0400,"X","LQ3SUEEWPWKL6",005,
"FH",01
"SH",2013/06/14 00:00:00 -0400,2013/06/14 23:59:59 -0400,"LQ3SUEEWPWKL6",""
"CH","TransactionID","InvoiceID",
......
Ich versuche zu schreiben ein einfaches Programm, um Folgendes zu tun:
- Wenn column1 = "RH", dann extrahieren spalte2 Wert (2013/06/15 02:14:58 -0400)
- Wenn column1 = "SH", dann extrahieren column4 Wert (LQ3SUEEWPWKL6)
und pipe die Ausgabe in eine Datei.
Dies ist mein code bisher, aber die if-Bedingung wird nicht für mich arbeiten
@echo off
:: Set input file in variable
::Set _InputFile=%1
:: Store input line into different variables
FOR /F "tokens=1-18* delims=," %%A IN (%_InputFile%) DO (
Set _var1=%%A
Set _var2=%%B
Set _var3=%%C
Set _var4=%%D
Set _var5=%%E
Set _var6=%%F
Set _var7=%%G
Set _var8=%%H
Set _var9=%%I
Set _var10=%%J
Set _var11=%%K
Set _var12=%%L
Set _var13=%%M
Set _var14=%%N
Set _var15=%%O
Set _var16=%%P
Set _var17=%%Q
Set _var18=%%R
IF "%_var1%"=="RH" echo %var2%
)
Meine CSV-Datei sieht gut aus in Excel und Editor, aber wenn ich das Skript ausführen, um die Anzeige der ersten variable, es sieht aus wie es einige sinnlose Zeichen kurz vor dem "RH" auf dem ersten Album - ich kann es umgehen, da Brauch ich zu extrahieren der zusätzlichen Spalte die Daten, wenn var1 = "RH":
"RH"
FH
01
SH
CH
TransactionID,PaymentTrackingID,
SF
SF
SC
RF
CAD,CR,0
RF
USD,CR,0
RC
FF
- Was haben Sie versucht? Wie weit bist du?
- Dies ist, was ich habe, so weit, aber die "wenn" - Bedingung funktioniert nicht fo mich.
- Meinst du
IF "%_var1%"=="RH" echo %_var2%
? Ich sehe nicht einvar2
(d.h. ohne Vorangehende '_'). - Was bedeutet
tokens=1-18
hier bedeuten?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollte funktionieren - keine Notwendigkeit, alle zuweisen von Werten zu anderen Variablen - ABER wenn Sie planen, Sie zu benutzen, dann
Beachten Sie, dass mit dieser Methode, da Sie bei der Zuordnung
%%x
zu_varx
dann, wenn%%x
zitiert, die Zitate ENTHALTEN, in der der Wert zugewiesen. Zum entfernen der umschließenden Anführungszeichen (falls vorhanden) verwendenSET _varx=%%~x
.Nachtrag 20130703-1956Z für OP ' s problem
skip=1
imFOR/f
Richtlinien sollte diese Zeile ignorieren. Beachten Sie auch, dass da Sie haben nicht ausgeführt einesetlocal
du es mit veralteten Werten aus einem vorherigen run - WENN Sie sind mit_var1
- aber ich bin verwirrt - wenn du das erste Beispiel, was verhindert, dass die Einstellung der_varx
in jedem Fall, warum sollte_var1
's Wert signifikant sein? Oder sind Sie bezogen auf den Wert im ersten element der ersten Zeile in der Datendatei?Haben Sie ein parsing-Problem. Ersten Ende der for-Schleife mit
)
, nach diese können Sie mit der neuen Variablen:Müssen Sie aktivieren verzögerte Erweiterung:
gab es noch keine Antwort auf das "warum funktioniert meine Zeile beginnt mit "RH"", ich werde etwas tun, gravedigging.
So, die ∩╗┐ kommt aus dem BOM (Byte Order Mark), das gibt die Datei ist in UTF, und die Art und Weise der bytes, die geschrieben werden, wenn nötig.
die Antwort:
Sie können
diese wird überprüft, wenn RH ist in %_var1% (wenn nach dem Auswechseln RH in der var, es ist unverändert, RH ist nicht in den var -)
das heißt, ob die Stückliste ist hier oder nicht, ist nicht wichtig. Wenn, wirst du Probleme haben, wenn Sie eine genaue übereinstimmung.
anderen Weg, damit umzugehen ist, damit Sie nicht die bom in der Datei, was bedeutet, dass das speichern entweder in ASCII oder UTF-8 ohne BOM; Oder ein tool verwenden, um Streifen der Stückliste aus deinem UTF-8-Datei.