• ベストアンサー

Windows bat でCSVデータを処理したい

<CSVデータの内容> 0004 10,11,19,12,15,1192,0,00 10,11,20,17,30,1192,1,00 10,11,21,01,00,1193,0,00 10,11,22,20,00,1193,1,00 (1)CSVデータの行ごとに、7番目と8番目の値が0,00の場合、10,11,19を取得して値をDBにインサートしたい。 (2)CSVデータの行ごとに、7番目と8番目の値が1,00の場合、10,11,20を取得して値をDBにインサートしたい。 このような処理をするには、どうしたら、良いでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • utakataXEX
  • ベストアンサー率69% (711/1018)
回答No.1

Linux/Unix系OSならシェルでやるところですが、Windowsの場合は、VBScriptなどでCSVを分解してSQL文を生成するような処理になります。 。。。が、どちらかと言うと、CSVのレイアウトのまま、仮テーブルに取り込んで、そこからWHERE句で絞って、本来入れたいテーブルにINSERTした方が楽では? (実際、これは、よく使われる手法です) CSVのレイアウトのまま取り込むメリットをもう一つ。 CSVのカラムを分解しぃの、条件制御しぃの、となると、上記に書いたようにシェルスクリプトなり、VBScriptなり、要するにプログラミング的な工数が掛かってしまいますが、CSVをただ単にテーブルに取り込むだけなら、ほとんど、プログラムを書く必要がない(場合が多い)です。 質問者様がお使いのデータベースが何なのかわかりませんが、ORACLE、MS SQL Server、MySQLその他諸々、大抵の主要な RDBMS には「CSVをテーブルに取り込むツール/機能」が用意されています。 だったら、それを使って、まず、CSVのレイアウトのテーブルに取り込み、テーブルからテーブルへのINSERTにしてしまった方が簡単です。

sn1108
質問者

お礼

utakataXEX さん、ありがとうございました!

関連するQ&A

  • windows bat バイナリデータ処理

    <CSVデータの内容> 12345,XXXX,1192 CSVデータ 12345 の部分のみ windows batでバイナリデータに変換処理をしたいのですが、 どうしたらよいでしょうか?

  • Windows batで指定した行のみ値を取得

    Windows batで指定した行のみ値を取得したいのですが、うまく取得できません。 <CSVデータの内容> 0002 10,11,19,12,15,1192 ,0,00 10,11,20,17,30,1192 ,1,00 <実行bat> REM データ取得 FOR /F "tokens=7-9 delims=," %%i in (dakoku_data.csv) DO SET C=%%i%%j これを実行すると、 C = 000 C = 100 となってしまい、最終行の値だけが格納されてしまうので、 指定した行の値だけ、取得するには、どうしたらよいでしょうか?

  • strutsでCSVファイルの取込

    strutsでCSV形式のファイルを取得し、内容を画面に表示するプログラムを作成しています csvファイルの途中で空項目(何も入っていない項目)があると、それ以降ズレて取得されてしまいます。 (違う行になると、また正常に取得できます) 空項目があった場合でも空のまま取得し、それ以降もズレずに取得する方法は無いでしょうか? よろしくお願いします。 ●コーディングの抜粋 String filename = file.getFileName(); InputStream is = file.getInputStream(); InputStreamReader isr = new InputStreamReader(is); while((csvData = ibufr.readLine()) != null){ String data0 = GetArrayToString.getErrElement(csvData,0); String data1 = GetArrayToString.getErrElement(csvData,1); String data2 = GetArrayToString.getErrElement(csvData,2); String data3 = GetArrayToString.getErrElement(csvData,3); String data4 = GetArrayToString.getErrElement(csvData,4); } ●CSVデータ 1行目 → 0,1,2,3,4 2行目 → 0,,2,3,4 ※2行名の2列目が空になっている ●取得結果        data0 data1 data2 data3 data4 1行目 →   0   1   2    3   4 2行目 →   0   2   3    4 ※CSVデータでは、2行2列目の値が空のときに、GetArrayToString.getErrElement()を起動すると、 2行2列目が空なので2行3列目の値を取得していまいます。 それ以降、行が変わるまでズレてしまう。 空の場合、隣の列の値を取得せずに空のまま取得し、それ以降の項目もズレずに取得したいです。 対処方法があればお願いします

    • ベストアンサー
    • Java
  • CSVファイルの処理方法

    PerlでCSVファイルの処理をしようとしています。 CSVファイル(ここではdata1.csvとします)の中身は、A列とB列に数値が1000行程表記されています。 -5,1 -4,2 -3,3  ・  ・  ・ 作成したPerlのファイル(ここではtest1.plとします)下のようにし、 while ($_=<stdin>){ print"$_\n"; } Cygwinコマンド上で、 $ perl test1.pl <data1.csv と入力すると、CSVファイル(data1.csv)の数値がCygwinコマンド上に全て表記されます。 前置きが長かったのですが、CSVファイル(data1.csv)の3行目までの数値だけをCygwinコマンド上に表記したい場合、どのようにプログラムすればよいのですか。 お願いします。

    • ベストアンサー
    • Perl
  • phpでcsvの処理で困ってます。

    abc.csvというcsvデータを2次元配列にして、その中から指定した行(送信されてきた値$linenum = $_POST['num'];)の5番目の値を1つ増やして、またcsvデータに上書きしたいと思い下記のようにしてみたのですが、うまくいきません。どのようにすればいいのでしょうか、具体的に教えていただければ、ありがたいです。よろしくお願いします。 <?php header("Content-Type: text/html; charset=UTF-8"); $linenum = $_POST['num']; $list = fopen("abc.csv", "w"); $h = 0; while ($array = fgetcsv($list, 1000,",")) {   for ($i = 0; $i < count($array); $i++){   $newarray[$h][$i] = $array[$i]; } $h++;  } $cu = $newarray[$linenum][4]; $cu = $cu + 1; $newarray[$linenum][4] = $cu; fputcsv($list, $newarray); fclose($list); ?>

    • ベストアンサー
    • PHP
  • CSVデータから配列に・・・。

    いつもお世話になっています。 現在別のサイトで出力したカンマ区切りを自サーバーのデータベースに格納する作業をしています。 別サーバーの出力値は、 ●,×,▲,■ ●,×,▲,■ ●,×,▲,■ ・・・ という形で異なる値が入っており、これを1行ずつ順番に処理していきたいのですがこれらの値を変数として扱うにはどのようにすれば宜しいでしょうか? ****構想***************************** $buf = file_get_contents('http://~.php?name=***&pass=***'); echo ($buf);//相手先からデータ取得 $count = 行数を取得 i=1 //1行目の場合 $a = 1行目の● $b = 1行目の× $c = 1行目の▲ $d = 1行目の■ <<それぞれデーターベースに格納>> $i<$count i++で2行目の処理へ・・・ ****構想ここまで***************************** 上記のようなプログラムをするにはどのようにすればよいでしょうか(;_;)? 以上お手数おかけいたしますがご教授頂けたら幸いです。

    • ベストアンサー
    • PHP
  • データベースの内容をCSVへ出力。

    VB2005環境、DBはOracle10gです。 データベースから取得したテーブルの内容を、CSVとして 出力する機能をサービスアプリに付け足したいと考えています。 データベースから値を取得する方法についていろいろと調べては みたのですが、VB2005環境では、Windowsアプリケーションとして 作成する方法しか見つからず(コントロールを配置する際に デザイナを使う方法)、クラスライブラリに機能としてSQL発行から CSVとしてデータを出力するまでの処理をどうしたらいいのか わからず困っています。 基本的なところから勉強できるサイトがありましたらご教授 願えないでしょうか? よろしくお願いします。

  • csvデータの開始行と最終行を全体の4分の1で区切り処理をしたい

    csvデータの開始行と最終行を全体の4分の1で区切り処理をしたい csvデータの開始行と最終行を全体の4分の1で区切り処理をしたいと思ってます。 csvファイルは20万件あります。4分の1なので1~50000件となります。 今回は50001~100000件までを行いたいのですが、先日教えていただいたwhile($lines = <IN>) ですと、最初から1件ずつ最終行まで処理をしてしまいます。 (ここから) open(OUT,">$csv"); open(IN,"$data") || &error(" $data を読み込みopen出来ません"); while($lines = <IN>) { ($seq1,$categ,$password,$imail,$cont) = split("\,", $lines); $cont .= " "; $data = "$seq1,$cont,1\n"; print OUT "$data"; $data = ""; } close IN; close OUT; (ここまで) 今回は20万件ですが、毎回このデータ量は月次ごとに変わります。 while周辺をいじるような気がしていますがどのようになるのかがわからなかったので質問いたしました。 お手数かけます。 よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • BAT処理でCSVデータのインポート

    よろしくお願いしますm(__)m 昨日から調べて作ってみたのですがうまく動かず、 MYSQLが強制終了してしまうこともありました(T_T) 疲れました・・・ ※test.batに以下の内容を書きました c:\mysql\bin\mysql -u **** -p**** < test.sql ※test.sqlに以下の内容を書きました LOAD DATA INFILE "c:\mysql\test.csv" INTO TABLE 商品管理.商品単品 FIELDS TERMINATED BY "," OPTIONALLY ENCLOSED BY "" ESCAPED BY "\\" LINES STARTING BY "" TERMINATED BY "\n" ※test.csvはカンマ区切りになっています。 ファイルは【test.bat】【test.sql】【test.csv】とも c:\mysqlに置いています。 この状態でtest.batを実行するとDOS窓が一瞬現れて消えて しまいます。 間違っているところやヒントなどあれば教えてくださいm(__)m

    • ベストアンサー
    • MySQL
  • CSVで画像をDBにつっこみたい

    お疲れ様です。 いつもお世話になっております。 現在PHP+MySQLで、名刺の管理ソフトを社内向けに作っています。 名刺の画像もレコードとしてくっつけるため、BLOBでデータを持っています。 一件一件のデータのインサートはできるのですが、CSVでのインサートの仕様を今検討していまして、皆様のお力を借りたく思います。 よろしくお願いします。 仕様 ・名刺画像はBLOBでDBにインサートする ・データはCSVであげる 対応検討 ・CSVでバイナリを扱える方法を探す  →一枚一枚バイナリに変換→CSVなので、手間な上に扱いにくい ・パスだけCSVに指定、その後パスをさらって画像だけPHPでバイナリ化、インサート  →パスからPHPでアップ処理ができるのか今のところ不明 ・CSVにファイル名だけ記載してもらい、CSV+画像をzipしてもらってアップ。execで解凍し、バイナリ化し、インサート  →外部コマンドの許可が必要。 本当は・・・ ・ファイルDIRを作ってファイルを置き、CSVにはパスだけ記載。  →一番楽だが今回は対象外。 てなところなんです 何かいい案はないでしょうか。

    • ベストアンサー
    • PHP