Windows-Batch-Datei Lesen und Parsen Linien in tokens und Variablen

Habe ich ein gutes Geschäft gemacht der Fortschritte durch die Suche auf dieser Website und lernen die lächerliche Sprache, die Windows batch-scripting, aber ich bin jetzt an einem Punkt, wo ich stecken geblieben bin. Ich habe eine text-Datei mit einer Variablen Anzahl von Zeilen, von denen jede in etwa so aussieht:

AA8315,"United States",N777AN,"American Airlines",AAL98,B772,"Boeing 777-223",AAL,"2013-06-11 23:30:47.923","2013-06-12 00:01:14.459"

Meine batch-Datei:

set THEDATE=2013-06-12
set THEDATABASE=c:\Kinetic\BaseStation\Basestation.sqb
set THECSVFILE=c:\Flights.csv
set THEOUTPUTFILE=c:\FlightsNew.csv
set THISLINE=""

if exist %THECSVFILE% del %THECSVFILE%
if exist %THEOUTPUTFILE% del %THEOUTPUTFILE%

:: allow time for the csv file to be deleted
timeout /t 2 /nobreak

c:\sqlite3.exe -header -csv %THEDATABASE% "select Aircraft.ModeS, Aircraft.ModeSCountry as Country, Aircraft.Registration as Reg, Aircraft.RegisteredOwners as Owner, Flights.Callsign, Aircraft.ICAOTypeCode as Type, Aircraft.Type as Model, Aircraft.OperatorFlagCode as 'Op Flag', Flights.StartTime as 'First Seen', Flights.EndTime as 'Last Seen' from Aircraft INNER JOIN Flights ON (Aircraft.AircraftID=Flights.AircraftID) where Flights.EndTime like '%THEDATE% %%' order by Flights.EndTime DESC;" >> %THECSVFILE%

::allow time for the csv to be written to file
timeout /t 5 /nobreak

::read %THECSVFILE% and loop through each line
for /F "usebackq tokens=* delims=" %%A in (%THECSVFILE%) do (
    set the_line=%%A
    call :process_line
)

:process_line
for /F "usebackq tokens=1,2,3,4,5,6,7,8,9,10 delims=[,]" %%1 in (%the_line%) do (
    set hexcode=%%1
    set country=%%2
    set reg=%%3
    set owner=%%4
    set callsign=%%5
    set planetype=%%6
    set model=%%7
    set opflag=%%8
    set firstseen=%%9
    set lastseen=%%10
    set THISLINE=%hexcode%,%country%,%reg%,%owner%,%callsign%,%planetype%,%model%,%opflag%,%firstseen%,%lastseen%
    echo %THISLINE% > %THEOUTPUTFILE%
)

(Ich bin die Zuordnung der Token zu Variablen, denn ich werde tun, eine zusätzliche Validierung und Formatierung von Ihnen später. Ich brauche, um diesen Teil der Arbeit zuerst!)

Ausgeführt, wenn das Skript tatsächlich eine Schleife durch jede Zeile in der Datei, jedoch scheint es nicht zu zuordnen %%1 auf die variable hexcode.

Die Ausgabe des ausgeführten Befehls sieht wie folgt aus:

C:\>for /F "usebackq tokens=1,2,3,4,5,6,7,8,9,10 delims=[,]" %1 in (AA8315 "United States" N777AN "American Airlines" AAL98 B772 "Boeing 777-223" AAL "2013-06-11 23:30:47.923" "2013-06-12 00:01:14.459") do (
set hexcode=%1
 set country=%2
 set reg=%3
 set owner=%4
 set callsign=%5
 set planetype=%6
 set model=%7
 set opflag=%8
 set firstseen=%9
 set lastseen=%10
 set THISLINE=,"United States" ,N807FD ,"Fedex Express" ,FDX1378 ,,"Airbus A310-324" ,FDX ,"2013-06-12 22:56:54.639" ,"2013-06-12 23:05:31.822"
 echo ""  1>c:\FlightsNew.csv
)
The system cannot find the file AA8315.

Jede Hilfe wird sehr geschätzt!

  • +1 für eigene nachforschungen zu betreiben und zu versuchen, um eine Lösung auf eigene Faust, bevor Sie Fragen stellen, und für den code in deiner Frage!
  • ABER - ich glaube, du wärst besser indem die gesamte Zeile als parameter an die Prozedur, dann bauen Sie Ihre Variablen aus %1..%9 mit SHIFT in der herkömmlichen Art und Weise. So, Land, Namen wie "Kongo, Demokratische Republik" behandelt werden, als einen einzigen string. Versuchen Sie es, indem Sie ein Komma zwischen "United" und "Staaten" in Ihrer Daten-Datei und sehen Sie den Unterschied.
InformationsquelleAutor SonicGoose | 2013-07-03
Schreibe einen Kommentar