2016-08-05 1 views
0

バッチファイルを初めて使用しました。これは難しい問題です。 stores.csvには、縦線で区切られた画像のURLを値として格納する 'Image'という列があります。 「AltImage2」、「AltImage3」などの追加の列もあります。どのように縦線で区切られた文字列を、CSVの各行に対して「AltImage」で始まる列に分割できますか? 'AltImage'の列はAltImage5にしか移動せず、特定の行に5つの画像URLがない場合があります。可能であれば、最初の画像URLを「画像」列に保存したいと思います。データのヘッダおよび単一行のバッチスクリプトを使用してCSV列の値を他の列に分割する方法

例:

Company,Title,Image,AltImage2,AltImage3,AltImage4,AltImage5 
Testco,U2X40,image1.png|image2.png|image3.png 

は、バッチを実行した後、結果を希望:

Company,Title,Image,AltImage2,AltImage3,AltImage4,AltImage5 
Testco,U2X40,image1.png,image2.png,image3.png 

は、これまでのところ、私はこれを試してみた:

for /f "tokens=3 delims=, " %%a in ("stores.csv") do (
    echo run command here "%%a" 
) 

ことはできませんが、 [Image]列に値をエコーし​​ます。私はこれがあなたのパースの問題を扱うと思うHow do I split a string on a delimiter in Bash?

+0

あなたがこれまでに自分で試してみましたがどのようなものはどこ?あなたの努力を分かち合いましょう...また、常に3つの項目があるかどうか、そして列見出しがどのように導出されるかを明確にしてください... – aschipfl

+0

あなたの入力の全体表現とあなたの希望するアウトプットutはすべきです。 – Squashman

+0

おっと、CSV形式を表示するように更新されました。また、イメージ文字列を縦線区切りに設定します。すべての列を表示する例を更新しました。 –

答えて

0

:ここ

はbashスクリプトを(残念ながら、私はバッチを必要とする)を使用してソリューションです。見積もりとusebackqオプションに注意してください。

for /f "skip=1 tokens=3 delims=," %%a in (stores.csv) do for /f "tokens=1-5 delims=|" %%b in ("%%a") do echo %%b %%c %%d %%e %%f 

ここでは、再生する完全なソリューションがあります。オプションのコンマを扱うよりエレガントな方法があるかもしれません。また、適切な場所に出力するように指示する必要があります。

@echo off 
setlocal enabledelayedexpansion 
echo Company,Title,Image,AltImage2,AltImage3,AltImage4,AltImage5 
for /f "skip=1 tokens=3 delims=," %%a in (stores.csv) do (
    for /f "tokens=1-5 delims=|" %%b in ("%%a") do (
     set line=%%b 
     if not "%%c"=="" set line=!line!, 
     set line=!line!%%c 
     if not "%%d"=="" set line=!line!, 
     set line=!line!%%d 
     if not "%%e"=="" set line=!line!, 
     set line=!line!%%e 
     if not "%%f"=="" set line=!line!, 
     set line=!line!%%f 
     echo !line! 
    ) 
) 
0

は、行毎にファイルを読み込むと、(あなたが|を脱出し、delayed expansionを使用する必要が,|を置き換える:

@echo off 
setlocal enabledelayedexpansion 
(
    for /f "delims=" %%a in (old.csv) do (
    set line=%%a 
    echo !line:^|=,! 
) 
)>new.csv 
1
@echo off 
setlocal 

< stores.csv (
    rem Read and write the header 
    set /P "header=" 
    call echo %%header%% 
    rem Process the rest of lines 
    for /F "tokens=1-3 delims=|" %%a in ('findstr "^"') do echo %%a,%%b,%%c 
) 
関連する問題