• 締切済み

データベース作成(SQL)のためのデータ整理に関する質問

よろしければお力添えをお願いいたします。 現在、大量のデータをデータベース化しようとしています。 扱うデータは ・種類:csvファイル(txtファイルにも出来ます) ・サイズ:400kb程度/ファイル ・ファイル数:17万強 これをMySQLでデータベース化しようとしています。 ですが、その前に元のファイルのデータ整理が必要になっています。 具体的に必要な操作は ・空白セルの穴埋め(空白セルには一つ上の行のデータを入れる) ・行、列の削除、および挿入 ・ヘッダーの挿入 ・ファイル名変更 です。 あまりにもデータ数が膨大なので、何かしらのプログラミング言語を使ってデータ整理をしていきたいのですが、こういった場合はどのような言語が向いているのでしょうか。 私はVBAならある程度扱えるので、Visual Basicなら取り組みやすいのではと考えています(VBは触ったことないので完全に妄想ですが...)。 ですが、ファイル・データ操作に対する言語の向き不向きがわかりません。こういった場合はC言語やC++といった言語の方が処理速度は速いのでしょうか。教えてください。 また、csvファイルによるデータ処理が遅いのであれば、txtファイルに変更して処理することも出来ます。 その場合、行の削除、列の削除といったものはC言語で可能なのでしょうか。 長々と質問していまい申し訳ありません。よろしくお願いいたします。

  • MySQL
  • 回答数1
  • ありがとう数1

みんなの回答

  • hrm_mmm
  • ベストアンサー率63% (292/459)
回答No.1

文字列処理は、perlが結構早いですが、全くさわったことがないなら、perl文法を覚えるのがちょっと大変でしょう。 Cにしてもプログラム作成後コンパイルという作業が入るので、全く初めてなら、そこを覚えるのにまず手間取るかと。 最終的に「個々の変換速度が早い」かよりも、まず「すぐに少しでも取りかかれるか」を考えた方が結果的には、他のプログラムを覚える前に作業が終わってたりしそうな気もします。 VBAは、excel付属のものとかでしょうか? excelでの作業に慣れていれば、 A.csvファイルをもう一つのシートに読み込んで、(ちょっと失念したけど、別ファイルに読み込む必要があるかもしれない、別ファイルのまま編集する方が楽かも) B.読み込んだデータに必要な処理を行う C.処理後の必要部分をcsvで付け替えたいファイル名で保存 D. AとBで使用したシートを削除し(または、ファイルを閉じる)、次のcsvファイル読み込み E. A~Dをループさせる ではどうでしょうかね? B部分が同じであれば、一連の処理を手動でやってみて、マクロ記録機能を使って、マクロに変換し、変数など使って整形して、さらに読み込みファイル指定部分を追加してループすれば、かなり楽ができるかとおもうけど。 B部分がかなり異なる場合(if分岐処理では複雑すぎる時)は、処理の異なるファイル毎にファイルを集めて、それぞれ処理プログラムを作ることになるかと。 他の言語を使うにしても、ファイル読み込み、データ編集、編集データ書き込みの順番は同じです。言語によって、読み書きに使うコマンド名や指定方法が違うとか、配列の扱いとか、各セルの情報に分解する(文字列のくくり記号やセル区切り記号のエスケープ処理)に結構手間がかかるとか、実行可能プログラムができるまでが大変です。 >csvファイルによるデータ処理が遅いのであれば、txtファイルに変更して処理 csvファイル自体が、テキストファイルですので、拡張子をtxtに変えても何ら変わるところはありません。

mtmmz1
質問者

お礼

詳細にお答え頂きありがとうございました。 VBAで取りかかった方が結局は早い気がしています。ですが、その後も大量の計算をこなす必要があるので、やはりC言語を勉強しようと思うに至りました。せっかく例示して頂いたのに申し訳ありません。 C言語でのアルゴリズムの参考にさせて頂きます。

関連するQ&A

  • Cによるデータの読み込み書き込み

    初めて書き込みます。 CプログラムでCSVファイルからデータを読み出し、 Oracleへと挿入したいと考えています。 環境は Windows server 2003 Oracle9i となります。 CSVからデータを読み込み、これを編集(カンマの削除など)し、Oracleへと挿入すると言う処理を行いたい。 言語としては、C(ProC)でお願いします。

  • マクロにて空白のセルを一括して消去でなく削除したい

    空白のセルを一括して、空白セルについた色も含めてマクロで全て削除したい。 現在のデータ(仕様)について 1.Sheet2に列ごとにセルに色をつけ、データもあるとします。 2.A列10行・B列6行・C;列18行というように、列によってデータの入った範囲が違います。 3.どの行も途中に空白セルはなく、詰めたデータです。 以上です マクロで一括処理したいと思いますが、このようなことができるコードを教えて頂けませんか。よろしくお願いします。

  • データの整理

    お世話になります。 不特定のデータの整理に困っています。お願いします。      A|    B |     C|     D| 1|重さ:10|長さ:3 |サイズ:S |(空白) | 2|長さ:20|重さ:10|耐久性:有|サイズ:M| 3|重さ:30|長さ:3 |サイズ:L |(空白) | のような項目が、あったとします。行も列も不特定の数です。 内容も様々なものがあります。 「重さ」(":"の前の文字)を項目名とすると、項目名順にそろえたいと思っています。      A|    B |     C|     D| 1|重さ:10|長さ:3 |サイズ:S |(空白) | 2|重さ:10|長さ:20|サイズ:M|耐久性:有| 3|重さ:30|長さ:3 |サイズ:L |(空白) | こんな感じです。列か行単位で並べ替えることしかできないのはわかっているんですけど…。 ちなみに列で一つの商品です。 こんなデータが300件あって困っています。 もっと理想的なことを言うのであれば、上のように整えたあと、重複している内容を削除して      A|    B |     C|     D| 1|重さ:10|長さ:3 |サイズ:S |(空白) | 2|     |  :20|サイズ:M|耐久性:有| 3|  : 30|    |サイズ:L |(空白) | なんてこともできればなぁ、と夢のようなことを考えています。 項目名はもともとわかれていたものを"&"でくくっているので分裂可能です。 今は並べ替えをして手作業で最終の形に直しています。 最初は上の行と比較して同じならば表示しない、みたいなことをしていましたがそうすると1と3の行が同じだった場合とかに適応されず… オートフィルタもうまくできませんでした。 VBAは簡単なものならできます。 無理なのは重々承知ですが、どうかお願いいたします。 エクセル:Excel2004forMac 環境:IntelMac

  • データの並び替え

    以下の表(処理前のもの)があります A列 B列 を比較し、 一致すれば次の行へ、一致しなければ空白セルを挿入し (処理後の表の様にしたい)次の行へ進むという処理をマクロで行えるように したいと思っています。 どのようなマクロを組めばよいのでしょうか?ご存知の方いらっしゃいましたら ご教授お願い致します。 <処理前> A列 B列 ああ ああ いい いい うう ええ おお おお きき かか きき くく けけ けけ <処理後> A列 B列 ああ ああ いい いい うう      (B列に空白セルを入れる)     ええ  (A列に空白セルを入れる) おお おお     かか  (A列に空白セルを入れる) きき      (B列に空白セルを入れる) きき      (B列に空白セルを入れる)     くく  (A列に空白セルを入れる) けけ けけ エクセル2003を使用しています。

  • データベース作成について

     ただいま、CSVのデータベースを作成していますが、 FAX番号を入力するとアタマの「0」が取れてしまいます。「0」を残す方法を教えてください。  また、もとになるデータのFAX番号にはすべて「-(ハイフン)」が挿入されていますが、このハイフンのみを一括して削除できる方法も併せて教えてください。よろしくお願いします。

  • ■質問事項

    ■質問事項  C言語にて、txtファイルを読み込んで検索した文字列が存在した場合、  その行の1行下の行を出力する方法について ■背景  事務系の仕事で、余計なデータが多く含まれるtxtファイルがあります。  そこで、必要なデータだけ出力できるように、C言語にてプログラミング  してみました。  しかし、検索した文字列の存在する行を出力することはできるのですが、  必要なデータは検索した文字列のひとつ下の行にあります。  ポインタに関してはまだ勉強不足な点もあり、  なかなかうまく動作してくれません。  ご教授いただければ幸いです。

  • 空白セルをデータと認識してしまいます

    Excel2003を使用しています。 「マクロの記録」を使って、あるリストを自動作成 しようとしているのですが、うまくいきません。 A,B2つの列に分かれたデータを連結させるため、 C列に「CONCATENATE」関数を入れて適当な行まで コピーします。(それ以上はデータが入らないだろうと思われる100行目ぐらいまで) その後C列をコピーし、「値貼付け」をして 関数を値に変えます。 そうすると、たとえば実際には20行目までデータが 入っていたとすると、21行目~100行目までは 空白になりますよね? でも、どうもその空白行もデータとみなされている ようなんです…。 Range("C2").End(xlDown).Row で下端セルを探そうとすると、100行目に なってしまいますし、「ジャンプ」で空白セルを 探しても、同じ結果になります。 空白セルを選んで一度「Delete」を押すと 正しく「空白」と認識するようなのですが…。 「実際にデータの入っているセルとそうでないセル」 を自動で判別させたいので、 簡単に「何も入っていないセルを”空白”と正しく 認識させる方法」はありませんでしょうか?

  • データファイルの処理と保存について

    はじめまして。 C言語についてまだ勉強が不十分なので、ご質問させていただきます。 現在、あるいくつかのデータファイルがあります。 中に入っているデータ数は2000行以上です。 列は3列です。 これを分割したいのですが、1つのデータファイルは100個で構成します。 その100個スケールを10個ずつずらして新しいファイルに入れていきます。 今Excelで手作業でやっているのですが、大変時間がかかります。 Excelですと、行番号1~100を取り出して新しいファイル「ファイル名_1.txt」をつくり、次に先ほどの100番目までのデータのうち、10番目まで削除して行番号11~110を取り出して新しいファイル「ファイル名_2.txt」を作成。 つまりこのファイルは90個のデータが重なっています。 □内にデータが10個だとすると □□□□□□□□□□  □□□□□□□□□□   □□□□□□□□□□    □□□□□□□□□□ といったように10ずつずらして、このようなことを繰り返しているのですが、現在総数666個のデータを用いて分割し、57個のデータファイルができました。 ファイルはそれぞれ100ずつとしていますが、最後のみ106個です。 このようなことをCでできないでしょうか。 ・100個スケールを10個ずつずらして格納。 ・出力ファイル名は「ファイル名_n.txt」(n=1,2,3,4...) ご協力お待ち申し上げております。 よろしくお願いいたします。

  • Excelで別々のデータを合体する処理を数百個作成

    以下の作業をできるだけ自動的するプログラム(VBA?)を教えてください。 マクロで何とかやろうとしていましたが、行き詰っております。 <最終目的>2つのExcelファイルにあるデータ(リストとフォーマット)を合体させて、リストを作成し、システムに取り込める形のCSVを作成すること。 <手順> (1)データを入れるためのテンプレートの書かれたファイルがあります。 テンプレートの形は、以下のようになっています。 ”空白セル”と書かれているセルには、のちに記載するデータの内容が入ります。     A        B    C 1 カテゴリ名  問題    回答欄 2 1-1  空白セル1 空白セル2 3 解答番号  回答 4   1   空白セル3 以上の内容が1セットです。通常のリスト形式ではないかなりイレギュラーな形です・・・ (2)テンプレートに記載するデータが入ったファイルが別途あります。   A   B  C   D           E       F  1 boy 空白 1 I am a ( ).  私は少年です。   I am a (1). 2 dog  空白 2 This is a ( ).  これは犬です。 This is a (1).  ・  ・  ・ 上記は2行分ですが、実際はこのデータが数百行あります。 このデータを、先のテンプレートに挿入します。(新しいブックやシートに書き出してもよいです) 挿入した形が以下になります。     A       B       C 1 カテゴリ名  問題      回答欄 2 1-1   I am a ( )      I am a (1)          私は少年です。 3 解答番号  回答 4   1      boy B2セルには、データのD1、E1のデータが入り、D1データの後ろで改行(ALT+Enter)しています。 C2セルにはF1が入ります。 B4セルにはA1が入ります。 上記の作業を、データ行分繰り返したいです。 現在はコピペ作業をすべて手作業でやっています・・・・ これを自動的に行えるような、都合の良いことが可能でしょうか?! もしできる方法をご存知の方がいらっしゃいましたら、教えてください。 また、ついでで結構ですのでVBAを学ぶための良書があれば教えてください。 どうぞよろしくお願いいたします。

  • リレーショナルデータベースにSQLを保存?

    コンピューターを使うには、データ(電子データ)が必要です。CPU、メモリー、グラフィックボード、チップセット、電源、ディスプレーなどが充実していても、データが空なら単なる鉄の塊で、飾るだけです。 データを保存するにはデータベースが必要と聞いた事があります。本当でしょうか?確かに、データベースにデータを保存する事が多そうですが、データベース以外にもデータの保存スペースがある気がします。私の記憶が確かなら、、キャッシュメモリーはデータベースの構成要素の一であり、キャッシュメモリーにデータがあればデータベースにデータがあるという事と聞いた気がする。 色々と記憶が曖昧で、混乱して、このように質問してます。 データベースにも色々ありますが、その王様はリレーショナルデータベースだとよく聞きます。リレーショナルデータベースは、ありとあらゆるデータを保存できて、何にでも活用できるそうです。本当でしょうか? 例えば、リレーショナルデータベースの操作にSQLが使われますが、このプログラム文をリレーショナルデータベースに保存しますでしょうか?私の認識だと、SQLはテキスト形式のSQLファイルで、マイドキュメントなどのフォルダーに保存します。 SQLの他、小説、写真、音声、ビデオ、3次元CADなども、リレーショナルデータベースに保存しますでしょうか? 私の認識だと、リレーショナルデータベースは表(2次元マトリクス)の集合です。表はセルで作られていて、行×列に配置しています。セル1つには、1行文字列、実数(整数と有限少数)、時刻、NULLだけが保存できます。これだと自由度や用途が狭く限られそうですが、セルを膨大に用意できて、これで幅広い自由度を得ます。 リレーショナルデータベースにも小説を保存できる。その方法は、小説を30字区切りで分割し、主キーを振ること。1つのセルに30字の文を保存し、その下に次の30字の文を保存し、これを終わりまで繰り返します。正しいでしょうか? リレーショナルデータベースにも写真を保存できる。先ず、赤表、青表、緑表の3つを用意する。各表のマトリクスサイズは膨大で写真のピクセルがセルに対応し、行×列に配置します。各セルには画素3原色の強度数(0~255だとgif形式だっけ?)を保存する。その後、赤青緑の3表を合成し、ビットマップで出力します。正しいでしょうか? リレーショナルデータベースは銀行でよく使われていて、お金の出入りや顧客管理でリレーショナルデータベースは大活躍しているそうです。だけど、本当はもっと用途が広い? フォルダファイルシステムとデータベースは別物と聞いた事があります。一方で、フォルダファイルシステムの基本はデータベースで、データベースに何かアプリを組み合わせてフォルダファイルシステムが形成されているとも聞いた事があります。どっちが正しいでしょう?どっちも間違い?