Windows Lot de lire le fichier et d'analyser des lignes en jetons, et les variables

J'ai fait beaucoup de progrès par la recherche de ce site et de l'apprentissage du ridicule langage de commandes Windows scripting, mais je suis maintenant à un point où je suis bloqué. J'ai un fichier texte avec un nombre variable de lignes, chaque de ce qui ressemble à quelque chose comme:

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"

Mon fichier de commandes:

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%
)

(Je suis à l'attribution de jetons de variables, car je vais faire des supplémentaires de validation et de mise en forme plus tard. J'ai besoin d'obtenir cette partie de travail d'abord!)

Lors de l'exécution, le script n'est en effet en boucle sur chaque ligne du fichier, mais il ne semble pas être l'attribution %%1 à la variable hexcode.

La sortie de la commande exécutée ressemble à ceci:

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.

Toute aide est grandement appréciée!

+1 pour faire votre propre recherche et essayer de créer une solution sur votre propre avant de poser des questions, et pour inclure votre code dans votre question!
CEPENDANT, je crois que tu serais mieux de passer la totalité de la ligne en tant que paramètre à la procédure, alors la construction de votre variables à partir de %1..%9 avec SHIFT de manière conventionnelle. De cette façon, les noms de pays comme le Congo, la République Démocratique du" sont traitées comme une seule chaîne. Essayez en entrant une virgule entre "Royaume" et "États" dans votre fichier de données et vous verrez la différence.

OriginalL'auteur SonicGoose | 2013-07-03