• ベストアンサー

CSVファイルの中身を操作したいけど何の言語がいいのでしょうか

noname#223623の回答

noname#223623
noname#223623
回答No.5

CSVファイルの処理は意外に面倒です。どの言語でやるにしろ、既存の関数やライブラリなどで処理したほうが自力でゴリゴリやるより楽だと思います。ここではExcelのVBAでやる方法を紹介します。 #1さんの回答に関連しますが、split関数を使う場合、 > 前提としてデータの中に ,(カンマ) が無い時ですが。 とあるように、次のようなデータではうまくいきません。  "abc,def",1,"ghi" このデータは次のように分割されます。  配列(0): "abc  配列(1): def"  配列(2): 1  配列(3): "ghi" 解決策として、ADOを使ってCSVファイルをデータベースとして扱う方法があります。これなら値の中にカンマが含まれていても問題ありません。具体的な方法は参考URLを読んでください。 処理の段階として、「(1)SQL文の実行」と「(2)実行結果を○○する(具体的な処理がわからないので○○です)」に分かれますが、少なくとも(1)の段階でExcelの行数制限に縛られることはありません。(2)でExcelのワークシートにコピーする場合は行数制限が絡んできます。 問題になるのは100MBという容量ですね。処理時間がどれくらいになるかは環境によるので、実際にやってみるしかないです。ちなみに自分でも試してみました。適当なデータですが500万件(114MB)から5万件を抽出、結果をCopyFromRecordsetでワークシートにコピーすると2分位かかりました。PCはCPU P3-600MHz, RAM 192MBなので今のPCだとずっと早いはずです。CopyFromRecordsetは単純にコピーするだけなので、レコードごとの処理が追加されればさらに時間がかかります。 WSHで処理することもできます。コマンドプロンプトで実行、結果はCSVファイルにリダイレクトしましたが処理時間はあまり変わりません。抽出だけならこれでも十分だと思います。あとは適当なアプリケーションで処理するということで。

参考URL:
http://home.att.ne.jp/zeta/gen/excel/c04p47.htm
rabitwo
質問者

お礼

ありがとうございます。 ActiveXデータオブジェクト(ADO)は初めて聞きました。 SQL文はリレーショナルデータベースを操作する時の言語なのですね。やっぱりExcelのワークシートにコピーする段階で行数制限がひっかかるでしょう(汗) WSHとはWindows Script Host?? 聞いたことありません。回答者さま、詳しいですね。おそれいります。

関連するQ&A

  • Visual C++によるcsvファイルの読み込みについて

    Visual C++を使い始めたばかりの初心者です。 恐縮ながら、Visual C++でのcsvファイルの処理方法についておたずねさせていただければと存じます。 通常のスクリプト言語では、1行読んできて、"," で split をしてやることで、csvファイルを処理できるのですが、Visual C++ではどのようにするのが効率がいいのでしょうか? csvファイルを簡単に取り扱うことができるようなクラスライブラリが提供されているものなのでしょうか?それとも、1文字1文字、コンマを判定していくのが普通なのでしょうか? よろしくお願いいたします。

  • CSVファイルの読み込み

    使用ソフト:Microsoft Visual Basic 2005 Express Edition csvファイル(カンマ区切り)で一列目(aaaの部分)を表すにはどうしたらよいのでしょうか? aaa,bbb,ccc

  • C言語 CSVファイルの読み込み

    C言語でCSVファイルから数字を読み込み、それを計算するというプログラムを作りたいのですが、CSVファイルについて全く知識が無く、加えてCSVファイルを利用したプログラムを作るのが初めての為、勝手がわかりません。 まずCSVファイルというのは、 1.2,2.3,3.4 4.5,5.6,6.7 7.8,8.9,9.0 といった数字(文字列)をカンマで区切ったテキストファイルですよね? それをどのようなプログラムで読み込むのでしょうか? 例えば、上記の数字を読み込み、 a. 1.2+4.5+7.8=x b. 8.9-5.6-2.3=y c. 3.4*6.7*9.0=z と計算する場合のプログラムを教えていただきたいです。 よろしくお願いします。

  • VBでCSVファイルのある行をインポート

    VBでCSVのインポートをしたいのです。 CSVファイルの中身で、最初の5行は読みません。そして、カンマ区切りの行の最初の文字が数字である場合だけを読みたいのです。で最後の3行も読みません。 ですので、CSVのデータを読む場合に最初の5行を飛ばすという方法か、カンマ区切りの行の最初の文字が数字の場合だけ読むという方法はありませんでしょうか。 Line Input #intFileNo, strTextLine strTextLine = Replace(strTextLine, """", "") str = Split(strTextLine, ",") こんな感じのコードで考えてます。 お分かりの方いましたらお願いします。

  • CSVファイル操作

    VBでCSVを操作しているのですが、わからないことがあるので教えてください。 1.CSVファイル(改行区切り)のレコード数を取得するにはどうすればいいですか? 2.CSVファイル(改行区切り)の最初のレコードのみ削除するにはどうすればいいですか?   また、レコードを指定して削除することはできますか? 3.CSVファイル(改行区切り)のレコードを指定して内容を変更することはできますか? Windows XP , VB6

  • csvファイルからの読み込みがスムーズにできません

    fscanfでCSVファイルから文字列を取り込み、カンマ区切りで4つの変数に文字列を代入しようと考えているのですが、出力されたcsvファイルが変わった区切りかたをしているのでうまく変数に代入できずに困っております。 例えば、出力されたcsvファイルは以下のようになっております "ABC CO.,I","4540",""STAR"","2010/03/31" 希望としては aにABC CO.,I bに4540 cにSTAR dに2010/03/31 をそれぞれ代入したいのですが aに入る文字列にはCO.,Iというようにカンマが既にありますので カンマ区切りで読み込むとめちゃくちゃになってしまいます ですので基準をダブルクオーテーションに置き、"と"の間の文字列を代入というような形が取れれば良いのですが、このような方法での文字列取得は可能でしょうか? c言語の勉強を始めて間もない為、低レベルな質問、表現であることをお許し下さい。 よろしくお願いします。

  • Excel VBAにてCSVファイルを読みたい

    ExcelにてCSVファイルを読んで処理をしたい。 ただし、CSVファイルをExcelでopenすると遅いので、 VBAにてファイルとして読み込みで処理をしたいのですが、 皆さんは、どのように行っていますか? ※CSVファイルは、テキスト区切り→"(ダブルコーテーション)です  テキスト区切り無しであれば、1行読んで、カンマをsplitすれば良いと思いますが。。。。

  • ExcelのCSVファイル出力について

    Excelが出力したCSVファイルを扱うプログラムに関する質問です。 Windwosの[コントロールパネル]⇒[地域と言語のオプション]で、 小数点の記号を「.(ピリオド)」から「,(カンマ)」に変更しました。 するとExcelからCSVファイルを出力したときの各データの区切り文字が 「,(カンマ)」から「;(セミコロン)」に変わるようなのですが、 これに対応できるプログラムを作りたいと考えています。 CSVファイルの区切り文字は、Windowsのロケール情報として プログラム上から取得可能なのでしょうか?

  • CSVファイルの中で、「 , 」カンマを使いたい

    「 , 」で区切られたCSVファイルの中で、「 , 」カンマを使いたいのですが、可能でしょうか? 具体的には「これは1,500円でした。」というように、CSVファイルに収められた文章内で出てくる半角の数字(お金)の区切りに使いたいのです。 全角では代用したくないのですが、CSVファイルでデータを受け渡しする際に、困っています。 例えば、特殊文字などで対応可能でしょうか?

  • ExcelでのCSVファイルの編集について、

    ExcelでのCSVファイルの編集について、 オートフィルタ機能を使いたいため、 ExcelでCSVファイルの編集しようとしているのですが、ちょっと苦戦しています。。。 私が試してみたこと 1.もとのCSVファイルの拡張子を○○.csv → ○○.txtに変更。   ↓ 2.Excelの「開く」からその○○.txtを読み込む。   ↓ 3.テキストファイルウィザードに従い、   1「カンマやタブなどの区切り文字によって~ 」にチェック   2「区切り文字」→ カンマ、「文字列の引用符」 → "   3「列のデータ形式」 → 文字列 ※090などの数字を、90と先頭の0を消されないように 上記のような手順でCSVファイルを取り込み、編集を終え、 保存する時は   「○○.txtにはテキスト(タブ区切り)と互換性のない機能が含まれている可能性があります。    この形式でブックを保存しますか?」 → このまま保存するため「はい」を選択 これでバッチリOK!…かと思われたのですが、 元の編集前の○○.txt は"名前","ヨミ","電話番号1", …… ""とカンマ区切りであったのが、 編集後の○○.txtは名前 ヨミ 電話番号1  …… タブ区切り(?) となってしまっています。 (CSVファイルとしてはタブ区切りでも問題ないのでしょうが…) どうすれば元のカンマ区切りの形式のまま保存できますでしょうか。 アドバイスよろしくお願い致します。