ここから本文です

お世話になります。 コマンドプロンプトのバッチ処理で、テキストファイルの集...

bur********さん

2019/4/2111:06:57

お世話になります。

コマンドプロンプトのバッチ処理で、テキストファイルの集計をしたいのですが、
どのようにコマンドを記述すれば良いかわからずに困っております。

(メモ帳にコマンドを記述して作ろうとしております。)
Excel、Access、フリーソフトなどのアプリを使用できない事情があり、テキストファイルのまま計算する必要があり困っています。

<詳細>
・データ行数は毎回変わるため2行目から最終行までを集計したい
・ダブルクリックで作成したbatファイルを実行すると集計結果が記載されたテキストファイルが出力されるようにしたい
・batファイルを編集で開いて「集計対象の列番号」「集計対象のファイルパス」「集計結果の出力先パス」を指定(変更)できるようにしたい

また、面倒なのですがデータによって「売上金額」左右にダブルコーテーションがあったりなかったりします。
ダブルコーテーションがあってもなくても対応できると非常に助かります。

よろしくお願いします。

<OS>
windows7

<集計対象データサンプル>

①対象データ:ダブルコーテーションなし
※集計対象は3列目の「売上金額」です。


月度,契約件数,売上金額
4月,150,400000
5月,90,500000
6月,180,600000

<出力結果>
1,500,000



②対象データ:ダブルコーテーションあり
※集計対象は3列目の「売上金額」です。

都道府県名,支店名,売上金額
北海道,札幌支社,"7,155,370"
青森県,青森支社,"7,861,890"
岩手県,盛岡支社,"3,086,450"

<出力結果>
18,103,710

閲覧数:
62
回答数:
1
お礼:
50枚

違反報告

ベストアンサーに選ばれた回答

プロフィール画像

カテゴリマスター

lin********さん

2019/4/2112:14:29

「VBScript」による回答です。

メモ帳だけで記述でき、プログラムファイルをダブルクリック(「シングルクリック」→「Enter」の方が確実)するだけです。

最初に「csv」ファイル群が存在するフォルダを指定し、次に出力するフォルダを指定します。

各ファイルごとに、結果を出力しています(ファイル名は同じですので、同じフォルダをうっかり指定してしまうと、元のファイルが消えて無くなってしまいます)。

もちろん、ダブルクォーテーションがあってもなくても、問題ありません。

以下のプログラムを、メモ帳かテキストエディタに貼り付け、「~.vbs」という名前で保存します。

「~」の部分は、何でもかまいませんが、「.vbs」の部分は、必ず、半角です。

できたプログラムファイルを(「~.vbs」ファイル)をダブルクリックするだけです。

最後に「Finished!」と表示していますので、「OK」を押して、終了してください。

Option Explicit
Dim a, ci, co, f, fi, fo, i, p, sa, so, t, x
Set so = CreateObject("Scripting.FileSystemObject")
Set sa = CreateObject("Shell.Application")
Set p = sa.BrowseForFolder(0, "Dドライブ", 0, "D:\")
Set fi = so.GetFolder(p.Items.Item.Path)
Set p = Nothing
Set p = sa.BrowseForFolder(0, "Dドライブ", 0, "D:\")
fo = p.Items.Item.Path
For Each f In fi.Files
If LCase(so.GetExtensionName(f.Name)) = "csv" Then
Set ci = so.OpenTextFile(fi & "\" & f.Name, 1)
x = ci.ReadLine
t = 0
Do Until ci.AtEndOfStream
x = Replace(ci.ReadLine, Chr(34), "")
a = Split(x, ",")
x = ""
For i = 2 to UBound(a)
x = x & a(i)
Next
t = t + x * 1
Loop
ci.Close
Set ci = Nothing
Set co = so.OpenTextFile(fo & "\" & f.Name, 2, True)
co.WriteLine Mid(FormatCurrency(t, 0, 0, 0, -1), 2)
co.Close
Set co = Nothing
End If
Next
Set p = Nothing
Set fi = Nothing
Set sa = Nothing
Set so = Nothing
MsgBox("Finished!")

すみません、いつもは簡単な説明を行うのですが、ちょっと、時間がないので、必要でしたら言ってください。

元のファイルは、読み込みにしか使っておりませんので、安心してお試しください。

  • lin********さん

    2019/4/2112:53:58

    追伸です。

    データは、「北海道,札幌支社,"7,155,370"」のように、3項目で、3項目目以外に「,」がデータにあってはいけません。

    たとえば「北海道,"札幌,支社","7,155,370"」はダメです。

    今回のプログラムでは、「,」でデータを区切って読み込んでいます。

    3項目目以降は「7」+「155」+「370」=「7155370」として処理しています。

    他の項目に「,」があると、位置がずれてしまうので、このプログラムは使い物になりませんので、気をつけてください。

  • その他の返信を表示

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

質問した人からのコメント

2019/4/23 00:30:07

この度は誠にありがとうございました。大変勉強になりました。

あわせて知りたい

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる