• ベストアンサー

固定長テキストファイルの読み込みについて

初めて質問します。 VC++6を使用して、以下のことを行おうと思っていますがどのようにすればよいのかわかりません。 固定長テキストファイル数千レコードのデータを、データベース風にSQL文を発行して該当のレコードのみを抽出するようなことは出来ないのでしょうか? その固定長テキストファイルには、キーとなる項目が存在します。 もし抽出が可能であるならば、追加や更新の方法もご教授していただけたらお願いいたします。

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

  • ベストアンサー
noname#271
noname#271
回答No.2

テキストファイルをSQL形式で読み込むなら shigatsuさんも書かれている通りにODBC経由で の方が楽だと思います。 がしかしODBC経由だとはっきりいって遅いです。 1レコードサイズが何バイトかはわかりませんが 仮に1レコード1024バイトとしたとき 5000件データがあってもオンメモリで5Mほどです。 現状のPCではメモリを豊富に載せてあるので特に問題は ないと思います。 で、これを、SQLと同じくselect時にファイルをオープンし ファイルごとメモリに保存し、ファイルをクローズする。 そして、必要なものを別のメモリに確保するほうが楽で す。 更新は修正があったもの検索結果データに書き込む commit時は元のデータのメモリを更新し ファイルをseekして書き込む roolbsck時は、元のデータを検索結果データに書き込む select終了のコマンドでメモリを開放する といったほうが楽でしょう 削除は処理内容としては更新と同じですが 削除したレコードが検索結果にわかるようにする commit時は元のデータのメモリから削除し ファイルをseekして削除する 削除は、先頭からスペースにするか、先頭にNULL等削除されたことがわかるようにすればOKだと思いますよ #単に削除したレコード以下をつめるのが面倒なだけです #が... 上記はローカルでのみの処理です。 ネットワーク上で複数からのアクセスがある場合は TCP/IPなどを使ってC/S形式にすればいいかと思います #この場合は、色々と考えなくてはいけませんが #更新中、削除中の場合をどうするか?ですね #この後は、考えてみてください

その他の回答 (1)

  • shigatsu
  • ベストアンサー率26% (511/1924)
回答No.1

ODBC経由にしたら何とかなりそうなんですが、やったことは無いのでとりあえずヒント程度で。 コントロールパネルにODBCデータソースとかアドミニとかが有ると思いますので、それを使います。 詳細はヘルプを見てください。というか前述の通り私もテキストを使ったことは無いので・・・

関連するQ&A

  • 外部テキストファイルの読み込みで

    VC#.NET(もしもC言語のカテゴリでしたらご指摘下さい) テキストボックスに単語を入力し、検索ボタンを押すことで、入力した単語とそれの解説が別個に用意されたファイル(01.txt)の中から抽出できる(下部リッチテキストボックスに表示される)プログラムを組みたいと思っております。 このようなプログラムは、いわゆるデータベースのカテゴリに属するのでしょうか?ファイルを読み込んだり検索したりするものはできたのですが、外部ファイルから部分的に読み込ませるというのがどうにもわかりません。 もしも上記のような説明でわかるという方がいらっしゃいましたら、ご教授ください。

  • テキストファイルの一部分を抽出する方法について

    ログファイルのようなテキストファイルの中から一部分だけ抽出することは可能でしょうか。 たとえばタイトルやSQL文、それに結果がダラダラと並んでいる一連のログファイル(テキストファイル)の中から、使いたい結果の部分だけ使用したいと考えております。 具体的には次のような感じです(テキストファイル部分は一字下げています):  --------------------  18,購入年月  SQL>******(省略します)*******  SQL>******(省略します)*******  SQL>******(省略します)*******  顧客番号  購入年月   購入個数  ----------------------------------  0000012   2010/01   4  0000530   2009/12   16  0001234  2009/11  398  3行取得しました。  ----------------------  19,顧客層  SQL>******(省略します)*******  SQL>******(省略します)*******  SQL>******(省略します)*******  ・・・ 以上のテキストファイルの中から、 (1)「顧客番号  購入年月   購入個数」 から (2)「3行取得しました。」 までを抽出したいです。 検索して範囲指定して切り取り…というのが原始的な方法ですが 対象ファイルが数個あるので、Excelで開き、VBA等で対応できればと思っています。 ちなみに(1)の項目名の間は複数スペースで区切られており、顧客~個数まで固定で、同一ファイル内に同じ文字列はないので、検索の条件に使えると考えています。(2)は抽出件数によって「*行」の箇所が変わるうえ、同一ファイル内の他の部分にも登場する文字列です。 (1)から次に初めて出てくる(2)までを抽出 といったことができればと思うのですが、なかなか良い方法が浮かびません。 何か良い方法がありましたらご教示いただければ幸いです。

  • EXCELから固定長テキストファイルを作れますか?

    みなさま、こんにちは。 EXCELから改行コード付きの固定長テキストファイルは作れますか? EXCELをテキストファイルに落としてエディタで開いて、必要なスペースやゼロを追加しているのですが、データ件数が多いと大変なので、もし方法があれば どうか教えて下さいまし。 よろしくお願いいたします。

  • 参照するテキストファイルの数

    決め打ちのSQL文を記述したテキストファイルをOpenステートメントで 読み込み、テキストボックスへ表示させています。 できるだけVBのコードをメンテしないようにしたいので、テキストファイルで SQLを持っているのですが、いろんなパターンのSQL文がありテキストファイルが 8ファイルくらいになってしまいます。 参照する為のテキストファイルは、何ファイルくらいまでが理想なんでしょうか? いくつもあってもかまわないのでしょうか? 教えていただけませんでしょうか?? よろしくお願いいたします。

  • 重複レコードの上書きについて

    重複レコードを上書きするSQL構文についての質問です。 SELECT文で更新対象のレコードが、 すでに存在しているかをどうかを確認にしてから、 UPDATE文を発行して更新する方法と、 DELETE文を発行して更新対象のレコードを削除した後に INSERT文で更新文のデータを追加する方法があるのですが、 処理的にはどちらが早くなるのものなんでしょうか?

  • ストアドでテキストファイルの読込み

    SV2005のC#にて固定長のテキストファイルを文字数で分解し SQL Server 2005 のテーブルとマスタ有無チェックを行い データグリッドビューに表示しているのですが データ件数が万単位でありかなりの時間が掛かります その為、対象ファイルをデータベースサーバーに複写して ストアドでワークテーブルにでも分解しSELECTをしようとして 色々調べているのですが… まず SELECT * OPENROWSET( BULK 'ファイル名' … を使ってSELECTを試みたのですが 単純にSELECTすると先頭の1行のみしか取れない事を発見。 BULK INSERT で行えば複数行可能のようなのですが SQLなのでファイル名を変数として渡せないし ワークテーブルに書き込む時に項目分解を行いたいので今一。 sp_OACreateでFSO経由で読み込むしかないかと思ったのですが 簡単な方法をご存知の方が居たらと思い投稿させて頂きました

  • データベースを使わず、テキストファイルで・・・

    SQLサーバーとかを使わずに、テキストファイルで 多人数がアクセスするプログラムを作成しました。 テキストファイルを開くときは、もちろん排他的 ロック、アンロックしていますが、心配なところです。 SQLサーバーなどを使わないで多人数(~10人程度)が 利用するプログラムはテキストファイルが壊れやすい でしょうか? 将来的には、やはりなんらかの安価なデータベースを使っ たWEBアプリに改変予定ですが、それにはどういったサーバ がおすすめでしょうか?また、作成のコツなどを教えて ください。昔、VBとSQLサーバーで社内システムを構築 した経験はありますが、離れているので技術力は 乏しいです。

    • ベストアンサー
    • Perl
  • VC++ファイル読み込みについて

    VC++のファイルの読み込みのことなのですが、 エディットボックス内に読み込むファイル名が記載されているとき そのエディットボックスの場所で、ENTERキーを押したとき ファイル内の情報を取り出すにはどうしたらいいでしょうか? ENTERキーはボタンをデフォルト化させており、 事なきをえていますが、 エディットボックスの方で困っています。 CStdioFile 文では出来ないのでしょうか? 初心者なので宜しくお願いします。

  • テキストファイル更新

    VB6.0のプログラムで、 テキストファイルを読み込みます。 その際に、レコードのある一部分のみを書き換えて 更新したいのですが方法を知ってますか?

  • テキストファイルから抽出

    あるテキストファイルから、複数の条件に合致するレコードのみを抽出したい時、例えば、 C:¥> findstr "a b" test.txt のように出来ると思います。 この”a b”の部分をもっと複雑にいろいろと変更したくて、別のテキストファイルに記載してそれを読ませたいのですが、そのようなことは可能でしょうか?