アプリ版:「スタンプのみでお礼する」機能のリリースについて

CSVファイルがあり特定の列を抽出したいんですが、excelが入ってなくマクロ(VB)が使用できない為、そのような処理をバッチで処理することは可能でしょうか?教えてください。ちなみに抽出条件は日付です。

A 回答 (4件)

@echo off


for /F "delims=, tokens=3" %%i in (data.csv) do echo %%i
のような感じで、カンマ区切りの列(サンプルでは、3列めのデータ)を抜き出せます。
例えば、
1列目のデータが日付だったら、3列目が取り出したいデータだったら
@echo off
for /F "delims=, tokens=1,3" %%i in (data.csv) do (
IF %%i==2005/08/15 echo %%j
)
の様にすると%%iに日付%%jに取り出したい列のデータが切り出せるので
IFで日付を比較して、一致するとき%%jを書き出すと言うようにします。
以上のバッチを適当な名前例えば、collect.batとしたとすると

collect.bat > outdata.txt
でoutdata.txt というファイルに切り出したデータを保存できます。

この回答への補足

csvファイルに下記のように日付が記載されています。
 → Sun May 16,****,****,

1列目の日付で比較したいんですが、比較するんには元データがないと出来ませんよね。どのように日付を取得すればいいのでしょうか?
dateコマンドに、何かオプションをつければこのような形式に変換し取得できるのでしょうか?教えて下さい。

補足日時:2005/08/17 15:58
    • good
    • 1

>どのように日付を取得すればいいのでしょうか?


今日(実行時現在)の日付という意味でしょうか、
単純に、実行する時に自分で設定して(バッチを書き換える)やるか、
collect.bat 'Sun May 16'
のようにパラメータとして渡すといいかと思います。

>dateコマンドに、何かオプションをつければこのような形式に変換し取得できるのでしょうか?
「コントロールパネル」の「地域と言語のオプション」で「英語」にすれば
Sun May 16のような部分をDATEコマンドから取り出すことはできますが、
DATEコマンド自身のオプションとしてはそういう表示に関するオプションはありません。

バッチで難しいようならVBScriptを使うとぐっとできることの幅が広がります。

この回答への補足

マクロの作成とかはした事あるんですが、VBScriptというのは記述した事がありません。簡単に作成できるようなものなんでしょうか?

補足日時:2005/08/17 22:04
    • good
    • 0

>簡単に作成できるようなものなんでしょうか?


VBAとかのマクロを作成したことがあるなら、
ほとんど同じような感じで作成できます。
    • good
    • 1

VBScript版のサンプル


(ハイフン)以下の部分をcollect.vbsのように名前を付けたとしたら
CScript /nologo collect.vbs < data.csv > outdata.txt
の様に実行します。
-----------------------------------------------------------
dim d, str, data, dateData
dim StdIn, StdOut
Set StdIn = WScript.StdIn
Set StdOut = WScript.StdOut
d=Date

Do While Not StdIn.AtEndOfStream
str = StdIn.ReadLine
data = split(str, ",")
dateData = split(data(0)) 'data書式:Sun May 16
if UCASE(dateData(0)) = UCASE(WeekdayName(Weekday(d),true)) and _
UCASE(dateData(1)) = UCASE(MonthName(Month(d),true)) and _
UCASE(dateData(2)) = UCASE(DatePart("d", d)) then
StdOut.WriteLine data(2)
end if
Loop

'MonthNameの英語のみ版
'標準のMonthNameは、システムの設定(言語)で変わる
function MonthName( n , flag)
dim name

name= Array( _
"January", "February", "March", "April", "May", "June", _
"July", "August", "September", "October", "November", "December")
if flag then
MonthName=left(name(n-1),3)
else
MonthName=name(n-1)
end if

end function

function WeekdayName( n , flag)
dim name

name= Array( _
"Sunday", "Monday", "Tuesday", "Wednesday", _
"Thursday", "Friday", "Saturday" )
if flag then
WeekdayName=left(name(n-1),3)
else
WeekdayName=name(n-1)
end if

end function
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています