• 締切済み

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/17068)
回答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

  • [VBscript] csvファイルを編集

    D&DでcsvファイルをD&Dした後、 下記のような内容に変更し、保存する コードをご教示頂けないでしょうか。 <変更前> 名前 処理 担当    田中 更新 製品 佐藤 更新 サービス 伊藤 更新 製品 桜井 削除 サービス <実行後> 名前 処理 担当   処理内容 田中 更新 製品   更新処理 佐藤 更新 サービス 更新処理 伊藤 更新 製品   更新処理 桜井 削除 サービス 削除処理 <csv変更内容> ・[処理]列に「更新」という値がある場合、[処理内容]列に「更新処理」という値を入れる ・[処理]列に「削除」という値がある場合、[処理内容]列に「削除処理」という値を入れる 宜しくお願いします。

  • CSVファイルの読み込みと表示(VB.NET)

    前回の質問では大変お世話になりました。 引き続き、VB.NETの勉強をしております。 特定のCSVファイルを読み込んで、その内容をラベルに表示させるプログラムを作成しています。 そのCSVファイルには、以下の情報が書かれています。 1:都道府県(北海道、岩手県、神奈川県、兵庫県など) 2:各都道府県の人口 3:各都道府県の面積 3つの情報は、すべてカンマで区切られています。 各都道府県ですので、47行にわたって情報が書かれています。 まず、ボタン1を押したときに、CSVファイルを読み込み 日本の総人口と総面積をラベルに表示させます。 次に、日本を10のエリアに分け(関東地方、近畿地方など) それぞれにボタンを配置します。 対応する地域のボタンを押すと、新しいウィンドウが開き 地域名・その地域の総人口・総面積が表示されます。 CSVファイルを読み込むという点で調べてみたのですが 複数の行にまたがっている情報をひとつにまとめて表示させる というのがよくわかりません。 CSVファイルの読み込み自体は、StreamReaderというものを利用する ということは調べたのですが、まとめて表示させるということがわかりません。 この問題がおわかりになるかたがいましたら、教えていただけますか。 よろしくお願いします。

  • ブラウザ上でcsvファイルの編集

    お世話になっています。 ブラウザ上でサーバにあがっているcsvファイルの編集をしたいと思っています。 そこで質問なのですが、 csvファイルをExcelみたいにテーブル表示で編集出来るもの(csvエディタ?)はあるのでしょうか? 特に、行の挿入・削除、列の追加・削除、設定に1行目をタイトルとして認識する、文字列をダブルクォーテーションで括るかどうかなどがあればうれしいです。 なければphpなどで、formとinputで自作ということになるのでしょうが・・・。 既にいいものがあればそちらを使いたいということで質問させていただきました。 http://www.ahref.org/cgi/csveditor/ のものはFirefoxでは動作しなかったので諦めました。

  • 複数CSVファイルからデータ抽出

    CSVファイルのA列(行は問いません)の文字が転記シートのA列(行は問いません)と一致していたら、転記シートのA列が一致した行の空白に、左から順にCSVファイルのA列が一致した行のF列の値を書き込む。CSVファイルの1行A列を転記シートのF列の値を書き込んだ列の1行目に書き込む。 できれば、書き込んだ値はCSVファイルから消したいです。 コピペでやっていたのですが、ずれていてどうしようもなくなりました。 CSVファイル一つ当たり、4000行ほどあり、ファイルは200弱あります。 プログラムを組んでくださると、ありがたいのですが。 質問というよりお願いになってしまいますが、よろしくお願いします。

  • VisualBasicからcsvファイルを読み込む

    VisualBasicからcsvファイルを以下のようなプログラムで読み込んでいます。 Open ファイルパス For Input Shared As #1 Do Until EOF(1): Input #1, A(i), B(i): i = i + 1: DoEvents: Loop Close #1 n行2列のcsvファイルとn行3列のcsvファイルを読み込んだ時に A(2)にセルB1、B(2)にセルB2の値を代入したいです。 現状だとn行3列のcsvファイルを読み込んだ時に A(2)にはセルA3の値が入ってしまいます。 n行3列の3列目のデータは無視したいです。

  • マクロCSV出力

    Sheet1に入力されている値をCSVファイルに出力したいと思っております。 但し、特定のセルだけを取得して、1つのファイルに出力したいと思っています。 (1)D2~G2に入力されている値を取得 (2)E4~E10までと、E4~E10の最終列までの値を取得 (3)B11の値を取得 (4)A13~A列の最終行まで、A13~A列の最終行の最終列までの値を取得 (1)、(2)、(3)、(4)の値を取得して、1つのCSVファイルに出力するプログラムを作成したいと思っております。 (1)は1行目に出力 (2)は2行目~8行目に出力 (3)は9行目に出力 (4)は10行目以降に出力 出力の形式は ”TEST”,” ”,”SMP”のようにダブルクォーテーションで値を囲って出力したいと思っています。 値が入っていないセルは” ”,としたいと思っております。 サンプルを作成して頂けないでしょうか。

  • vbs csv 編集

    vbsを実行し下記のようにcsvを編集することは可能でしょうか。 ドラッグアンドロップでvbsを実行することとします。 <実行前> A列 B列  C列 名前 性別 出身地 田中 男  北海道 佐藤 女  沖縄 伊藤 女  東京 桜井 男  東京 <実行後> A列 B列  C列  D列   E列 田中 男  北海道 000001 学生 佐藤 女  沖縄  000002 学生 伊藤 女  東京 100000 社会人 桜井 男  東京  100001 社会人 編集箇所としては、 ・一行目を削除し、二行目を先頭にする。 ・D列には000001~999999まで連番で値を追加 ・E列には、D列の値が「~99999」の場合は、学生。  それ以上は、社会人と記載するようにする。 宜しくお願いします。

  • CSVファイルの処理方法

    PerlでCSVファイルの処理をしようとしています。 CSVファイル(ここではdata1.csvとします)の中身は、A列とB列に数値が1000行程表記されています。 -5,1 -4,2 -3,3  ・  ・  ・ 作成したPerlのファイル(ここではtest1.plとします)下のようにし、 while ($_=<stdin>){ print"$_\n"; } Cygwinコマンド上で、 $ perl test1.pl <data1.csv と入力すると、CSVファイル(data1.csv)の数値がCygwinコマンド上に全て表記されます。 前置きが長かったのですが、CSVファイル(data1.csv)の3行目までの数値だけをCygwinコマンド上に表記したい場合、どのようにプログラムすればよいのですか。 お願いします。

    • ベストアンサー
    • Perl
  • csvファイルの特定のセルから読み込み

    C++についての質問です。 あるファイル(テキストでもエクセルでもCSVでも可)に書かれている特定のセル数値(整数)を読み込んで、プログラム内で入力する方法が知りたいです。 例えば、"test.txt"というファイルに 1 2 3 4 5 3 2 3 1 2 というような数字の羅列があった場合に,2行目4列目のセルの値を読み込む プログラムは、どうのうにすればできるでしょうか?

  • excel vbaで複数のcsvファイルの読み込み

    100シート分のcsvファイルのデーターを一つずつ読み込んでexcelにコピーして使用してますが莫大な時間がかかって困ってます。 vbaを使用して作業を簡素化出来る事は出来ないでしょうか? ------------------------------------------ ※ csvの概要 excelで1枚のcsvファイルを開くとA列の11行目から65536行まで数値データがあります。 ※ vbaできたらよいなと思う仕様 そこで、複数のcsvファイルを選択して読み込むとCSV_データと言うSeetのA列の10行目から1枚目のcsvファイル、B列の10行目から2枚目のcsvファイルと言う風に選択した分のcsvを列に続けて数値データを貼り付けしてくれるvbaをご教授していただけると大変助かります。 不躾で申し訳ございませんが宜しくお願い致します。 excel2003 ------------------------------------------