• ベストアンサー

CSV出力

CSVファイルの中身を比較し該当の行だけを読み込み、別ファイルに記述する方法を調べています。 オブジェクト.ReadLineで読み込むことは出来ており、その読み込んだ行を別ファイルに追記していく方法を教えてください。もしくはアドバイスでも構いませんのでお願い致します。

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

  • ベストアンサー
  • kamejiro
  • ベストアンサー率28% (136/479)
回答No.1

読取ファイルをInputモードで 書込ファイルをOutputモードでオープン。 データが終わりになるまで繰り返しで、 読取ファイルから1件読む。 比較文で、該当行なら書込ファイルに書き出し。 該当行でないなら何もしない。 繰り返しが終われば、 読取ファイル、書込ファイルともにクローズ。 という形で進めればいかがですか。 CSVの具体的なデータ形式と中身を比較する条件が明確ならもっと具体的に考えられるのですが…。

SUPERH2O
質問者

補足

レスありがとうございます。 >CSVの具体的なデータ形式と中身を比較する条件が明確ならもっと具体的に考えられるのですが…。 【データ】 "2005/09/23 0:00:00,1234,・・・・,5678,90" 【比較】 先頭10文字の日付で比較します。 宜しくお願い致します。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

回答No.2

該当行の抽出作業であれば、e?grepを使えばいいんじゃないですか? 例えば、 「数字3桁-数字4桁,長さ不定の文字列,数字に2つの'-'混じり」と言うデータの抽出は、 grep [0-9][0-9][0-9]-[0-9][0-9][0-9][0-9],.*,[0-9][0-9]*-[0-9][0-9]*-[0-9][0-9]* *.csv でできます。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • CSVファイル

    CSVファイルを1行ずつ比較して読み込み、一致した行を別ファイルに記述していこうと思っています。 現在、csvファイルを読み込む所まで出来ています。 比較して別ファイルに記述する方法を教えて下さい。 もしくはアドバイスください。 【ファイルの中身】 "09/09/2005 0:00:00,aaa,bbb,ccc" 【比較条件】 当日の日付を取得し、年月日だけで比較する Dim objFSO ' FileSystemObject Dim objFile ' ファイル読み込み用 Set objFSO = WScript.CreateObject("Scripting.FileSystemObject") Set objFile = objFSO.OpenTextFile("c:\test.csv") Do while objFile.ReadLine <> ""         'IF文を記述(条件:日付)        '別ファイルに記述する Loop objFile.close Set objFileSystem = Nothing Set objFile = Nothing

  • Csvから1行ずつ変数に格納するには;

    いつもお世話になっています。 次のようなcsvファイルがあります。 会員番号,パスワード,データ1,データ2,データ3 1234567,1111,1970/1/1,1990/4/1,A 1111111,1,1960/1/1,1985/4/1,AB ・ ・ ・ このcsvファイルをExcelのVBAで次のようなコードで読みとろうとしています。 Set fs = CreateObject("Scripting.FileSystemObject") Set f = fs.GetFile("csvファイル名") Set ts = f.OpenAsTextStream(1, -2) ssk = ts.readline readlineは1行だけ読み込むと覚えているのですが、なぜか変数sskにはすべての行が連結された状態で格納されてしまいます。 2回目以降のreadlineでは「ファイルにこれ以上データがありません。」と出ます。何か根本的に間違っているのでしょうか;; このようなcsvファイルを、正しく1行ずつ変数に格納する方法にはどのようなものがありますでしょうか。 よろしくお願いします。

  • バッチファイルでcsvファイルに追記していきたい

    C:\log\abc のディレクトリの中に、 log.csv log1.csv log2.csv log3.csv.... という複数のファイル(最終番号は絶えず変動する)があり、 それぞれは1行4カラム記載されています。 やりたいことは、バッチファイルにより log.csvのカラム内容 log1.csvのカラム内容 log2.csvのカラム内容 log3.csvのカラム内容 が最終番号のcsvファイルまで1つのlogR.csvに纏まることです。 下記のバッチファイルを組んでみたのですが、 C: CD \log\abc COPY log.csv logR.csv type log1.csv >> logR.csv type log2.csv >> logR.csv type log3.csv >> logR.csv これだと、追記が2行目3行目とならず、1行目の横にずっと広がって追記されてしまいます。 また、バッチファイルの指示が番号指示になってしまいますので、この指示番号から外れた ファイルがあった場合は、書き込みがされなくなります。 やりたいことは、 ●行として追記されること。 ●logの番号.csvを全て自動で読みだして追記することです。 http://okwave.jp/qa/q1371517.html の方法は試したのですが、どうもうまくいきませんでした。 お手数をおかけいたしますが宜しくお願い致します。

  • VBA csvを100万行ずつ各シートに読み込み

     今晩は、質問させていただきます。どうぞよろしくお願いいたします。 環境:Win7 64bit SP1、 エクセル2010 でございます。  「1000万行×3列」のCSVファイルデータを、100万行ずつ シート1~10に振り分けたく悩んでおります。 ・エクセルは100万行しかありませんので、「一旦開いてから各シートに分割」という方法が使えませんし、 ・またReadLineいたしますと(1行ずつの方法しか存じませんので)時間がかかりそうですし、 何よりcsvファイルのカンマ記号も含め1行全てが、エクセルのひとつのセルに入ってしまうのでは、などと考えております。  何か良さそうな方法を思いつかれる方はおられませんでしょうか。 もしお詳しい方がいらっしゃいましたら,どうぞよろしくお願いいたします。

  • フィルター可視データのCSV出力について

    いつも助けてもらっています。 EXCELのVBAにて、 タイトル等の不要な行を削除した上で、 データが入っている行全てをCSVファイルに出力する マクロを作って使っています。 全件をそのままCSVファイルに出力するのは問題ないのですが、 オートフィルター(手操作)にてヒットしたデータのみを CSVファイルに出力したいです。 ネットでいろいろと調べると、 可視データを他のシートにコピーして・・・やる、 というやり方しか見つかりませんが、 他のシートにコピーしないで行う方法はないですか? (マクロで実行する場合です) もし可能であるならば・・・ コードの記述でなくても、 こんなやり方・・・とか、 どこか参考になる情報でもリンクしてもらえると 助かります。 よろしくお願い致します。

  • CSVから指定行だけを読み込み

    VB.NETを使用しています。 行数がランダムなCSVファイルからReadLineを使用して 1行を読み込むことは可能なのですが これを指定した行(例えば最終行)を読み込ませる為には どのように指定すればいいのでしょうか?

  • csvファイルでの出力について

    C言語初心者です。 プログラミングにおいて質問なのですが、csvファイルを読み込み、 そのデータを用いて計算し、csvファイルで出力するという問題なのですが、C言語においてcsvファイル形式で出力するにはどのような方法がありますか? 補足:ラベル行に全角文字を入力しないといけません。

  • 外部のCSVファイルをPHPで読み込み、出力させたい

    下記の質問を参考に外部のCSVファイルをPHPで読み込み、出力させるphpを書きました。 http://oshiete1.goo.ne.jp/qa1615206.html data.csvは "データ01" "データ02" "データ03" ・・・ といったように100行書いてあります。 <1ページ目に記述したphp> <?php $fp = fopen("data.csv", "r"); $repeat = 10; $count = 1; while ($data = fgetcsv($fp, 10000)) { if ($count > $repeat) { break; } print <<<EOD $data[0] EOD; $count++ ; } fclose ($fp) ?> 2ページ目には11行目からのデータを出力したいと思い、 $data[0]の部分を$data[11]に変えたり、 $repeat = 20; $count = 11;にしたりしたのですが、 両方ともうまくいきませんでした。 2ページ目にcsvの11行目からのデータを出力するにはどうすればいいのでしょうか? 私がしたいことは、1ページ目にcsvの1~10行目を、2ページ目にcsvの11~20行目を出力したいとおもっております。 上記のphp以外の記述でも構いませんので、どなたかお分かりになる方がいらっしゃいましたら是非教えて下さい。 よろしくお願い致します。

    • ベストアンサー
    • PHP
  • CSVファイルの特定の行だけを読み込みたいです。

    例えば以下のようなCSV形式のデータが10000行あるとします。  1,10,15,3  2,1,5,1  70,2,4,2  2,4,5,6  11,1,9,9  ・・・ 上記ファイルから、例えば9999行目を取得したい場合、 現在は以下のような手順で9998行をループで読み込んでから、 9999行目を取得しています。(エラー処理などは省いています)  BufferedReader br = new BufferedReader(new FileReader("hoge.csv"));  for( int i=0; i<9998; i++ ){ br.readLine(); }  System.out.println("9999行目="+br.readLine()); ただし、上記の通りループを9998回まわし、 データを1行ずつ読み込むのは非常に効率が悪いです。 できれば、br.readLine(9999); といった感じで行数を直接指定できる方法があるならば、 無駄な処理を省けて見栄えも速度も良くなると思うのですが、 Javaの標準のクラスではこういったことは可能なのでしょうか? 私なりに調べてみたのですが調べ方が悪いのか知識が及ばないため、 こちらで質問させていただきました。 もしご存知の方がおられましたらアドバイスいただけますと助かります。 よろしくお願いします。

    • ベストアンサー
    • Java
  • PHPでのcsv出力について

    PHPでのcsv出力について、教えてください。 csvファイルをあるフォルダに保存させたい(例えばZ:\csvoutput等)の ですが、どのように作ればよいのか分からず、ちょっと困っています。 ネットなどで出ている一般の(?)やり方だと、csv保存時に別画面 (ポップアップ)が出てきて、「開く」「保存」「キャンセル」のボタンが表示され、 保存時に自分でフォルダを指定して保存しますが、これを随時固定の場所に 保存させたいのです。csvのファイル名は固定で決まっています。 ちなみに、該当となる保存先フォルダは必ず存在するという前提で良い事になっています。 緊急の依頼で、ちょっと急いでいます。 下手な文章でごめんなさい。。 宜しくお願い致します。

    • ベストアンサー
    • PHP