• 締切済み

VBScriptでcsvファイルの編集は出来ますか

プログラミング初心者です。 ネットや本で調べてみたのですが、どうもわからなかった為、 ここに質問を挙げさせていただきました。 今、担当している仕事で、ASPのファイルを作成しています。 機能としては、あるCSVファイル(test.csv)から 列の値を指定し、その値を含んでいる行を検索し、 その行の値をテキストボックスにそれぞれ表示させ修正(他の行の値は変更しない。)、 もしくは選択した行のみの削除(値を無くすのではなく、行自体の削除)を行いたいのです。 (例) ■修正 test.csvの内容が下記のような場合、 国   |  地方  |  都道府県  ++++++++++++++++++++++++++ 日本 |  関東  |  東京 日本 |  東北  |  青森 日本 |  九州  |  福岡 1.「地方」の列から「東北」の行を選択し、それぞれの値をテキストボックスに表示。 2.1で選択した行の都道府県を「秋田」に変更し、上書き。 3.test.csvの内容が下記のように変更されている。 国   |  地方  |  都道府県  ++++++++++++++++++++++++++ 日本 |  関東  |  東京 日本 |  東北  |  秋田 日本 |  九州  |  福岡 ■削除 1.「地方」の列から「関東」の行を選択し、それぞれの値をテキストボックスに表示。 2.1で選択した行を削除し、上書き。 3.test.csvの内容が下記のように変更されている。 国   |  地方  |  都道府県  ++++++++++++++++++++++++++ 日本 |  東北  |  青森 日本 |  九州  |  福岡 ※前提条件として、1つの列内には同じ値は入らないものとします。 いろいろ調べてみて検索、表示は何とかできそうなのですが、 修正や削除の方法がわかりませんでしたので、 お手数をおかけして申し訳ありませんが、ご存知の方がいらっしゃったら 参考になるソースのご教示をお願い出来ますでしょうか。 初心者ということもあり、そもそもこのような機能をASP(VBScript)で行えるのでしょうか? その点についても、教えていただけると嬉しいです。

みんなの回答

回答No.3

改行というのは見た目上だけのものでファイルの中身では、 改行はないような形でずっと横一列に並んでいるだけの状態です。 そのため、先頭からのバイト数が変わってしまうような修正や削除は通常出来ません。 どうしてもするのならば、 内容をメモリ上に読み込んでから必要な修正を行い、全部書き直すです。 あるいは、もう一列フラグ的な列を追加して、更新内容をcsvに追記していきます。 csvのサイズはどんどん増加していくことになりますので、最適化するプログラムも必要になりますが 挿入、修正、削除を行う場合のコストはへります。 逆に、表示するときにすべてを読み込まなければならないので表示の時のコストは増えます。 ASPのように不特定多数のアクセスがある場合、ファイルの排他制御をわすれずに。

  • todo36
  • ベストアンサー率58% (728/1234)
回答No.2

CSVファイルにADOでアクセス http://www.katch.ne.jp/~h-inoue/tips/asp/0001.html

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.1

CSVなどはその場で問題になっている1行だけを書き換えて、あとは何もしないでそのままで。書き換えた行だけ変わるということは出来ない。 いわば、部分的書き換えが出来ないといったらよいのか。 (1)まず変わるための材料を提供するデータとしてCSVファイルを使う(全日本から関東だけのデータを表示するなど) この場合は全データを読んで読む都度IF文で関東を判別し、該当ならとればしまい。 (2)関東のデータの中から変更されたもの(だけ)を変更後でCSVなりで書き出す。その際にコードの唯一の識別のためのIDのようなもの(キーという)を持っていることが必要。 削除するものはそういうサインを持ったレコードを書きだす。 (3)もとのデータに対し変更データをもちいて、ID(マッチングキー)を頼りに結びつけて、変更後のデータで置き換えたデータを作る。 変更の無い行(マッチングしなかったレコード)はそのまま行単位で書き出す。 これをファイル更新Updateという。 更新のためのロジック(アルゴリズム的なもの)は定石が在る。 ーー 現在では、全部データが画面に見えていて、データ変更は自由で、変更後で保存は、意識せずともやってくれる、エクセルしか知らない層が増えて、こんなことは思いつかないのだろうが、コンピュターを事務に使い始めたテープベースの時代には、こういう方式が当たり前(主流)であったのだ。 今は使えるパソコンメモリが増えて、(膨大なデータでなければ)全レコードをメモリ内展開や、配列に持つことも可能になっているので、こういうことを考える初心者も居るだろうが。 ーー 本題の、VBScriptでもシーケンシャルファイルのCSVを書いたり読んだりできるスクリプトはあるので出来る。 ーー WEBを離れてVBScriptでテキストボックスを表示したり、選択したものを掴むコード例がWEBに少ないので、エクセルVBA+VBScriptでやるほうがやりやすいのでは。 質問者の課題がWEBと関連しているのか、説明されて無くて、VBScriptを使う必然性が良くわからないが。 エクセルにもツールーマクローMiicrosoft Script Editorがあるが。

関連するQ&A