私の問題を説明させてください。大量のデータを含むExcelからエクスポートされたcsvファイルがあります。ファイルの最初の行にはタイトルがあり、2番目の行には列見出しがあります。そのファイルから2つの列(2番目と3番目)だけを抽出し、それらを1つの列に配置して、出力を別のファイルに送信する必要があります。
例:
Title
colA , colB , colC , colD ,...
abc , def , ghi , jkl ,...
abc , def , ghi , jkl ,...
abc , def , ghi , jkl ,...
abc , def , ghi , jkl ,...
問題は、csvパーサーが、-()@文字を含む文字列を含む行に出会うと失敗することです。(ループはそれらを区切り文字として扱うので、毎回範囲外エラーが発生します)。
これが私がすでに持っているものです。
@Echo off & setlocal EnableExtensions
setLocal EnableDelayedExpansion
REM creating and clearing files
copy /y NUL C:\list1.csv >NUL
copy /y NUL C:\list1_tmp.csv >NUL
copy /y NUL C:\exportedColumns.csv >NUL
copy /y NUL C:\Result.txt >NUL
set Result=C:\Result.txt
set Source=C:\sourcelist.csv
set list1=C:\list1.csv
set list1_tmp=C:\list1_tmp.csv
set expCol=C:\exportedColumns.csv
REM skip 1st two lines from source file and put to output file list1
for /f "skip=2 delims=*" %%a in (%Source%) do (echo %%a >>%list1%)
REM shorten each line to 500 chars and put it to new file
for /f "tokens=* delims=" %%a in ("%list1%") do (
set s=%%a
set s=%s:~0,500%
echo.%s% >> "%list1_tmp%"
)
REM ^^^^^^^^^^^ this is not working. It puts only 1 space to the output file
rem Parsing the csv file
rem Process the file:
call :ProcessFile < %list1_tmp%
exit /B
:ProcessFile
set /P line=
:nextLine
set line=:EOF
set /P line=
if "!line!" == ":EOF" goto :EOF
set i=0
for %%e in (%line%) do (
set /A i+=1
for %%i in (!i!) do (
if %%i==1 echo %%~e >> %expCol%
if %%i==2 echo %%~e >> %expCol%
)
if %%i==3 goto nextLine
REM I don't want it to process all the columns
)
goto nextLine
これを見て、2つの列を1つにまとめ、出力を1つのファイルに入れるのを手伝ってもらいたいと思います。
とてもありがたいです。