[リストへもどる]
一括表示

投稿時間:2003/10/08(Wed) 11:30
投稿者名:でっち
Eメール:
URL :
タイトル:
CSVファイル、指定行編集
CSVファイルの操作をしていて、このページにお世話になってます。

今、ファイルの編集を考えています。このページを参考にファイルの
全データを配列で読み出して、内容を書き換えてまた書き込むという
形式で編集を行っています。

データが少ないとこれで大丈夫なのですが、行数が何万行となると
重くなりそうな気がします。そこで、指定行だけを編集したいんですけど
読み込むのは、またこのページを参考に出来るようなんですけど、
書き込むのは出来るんでしょうか?

すみません、教えてください。よろしくお願いします。

投稿時間:2003/10/08(Wed) 13:33
投稿者名:NAO★
Eメール:
URL :
タイトル:
Re: CSVファイル、指定行編集
各行、同じバイト数ならできますが、
そうでない場合はだめです。

投稿時間:2003/10/08(Wed) 15:01
投稿者名:あつ
Eメール:
URL :
タイトル:
Re: CSVファイル、指定行編集

> 書き込むのは出来るんでしょうか?

実現されたいことを整理するとこういうことでしょうか?
●指定の一行を読込み画面に表示
●編集後、その一行を元のファイルの元の行に書き込む

であれば、
何行目かはわかっているはずなので以下のベタなやり方ですが
可能です。

1.元ファイル(以下A)を一行ずつ読み、他のテンポラリィファイル(以下B)に書き出す
2.その際、読込み件数をカウントしておき、画面編集した行に来たとき、画面のデータをBに書き出す。
3.Aを全行Bに書き出した後、Aを削除し、Bをリネームする。

投稿時間:2003/10/08(Wed) 16:28
投稿者名:でっち
Eメール:
URL :
タイトル:
Re^2: CSVファイル、指定行編集
> 実現されたいことを整理するとこういうことでしょうか?
> ●指定の一行を読込み画面に表示
> ●編集後、その一行を元のファイルの元の行に書き込む

やりたいことは、その通りです。

> 1.元ファイル(以下A)を一行ずつ読み、他のテンポラリィファイル(以下B)に書き出す
> 2.その際、読込み件数をカウントしておき、画面編集した行に来たとき、画面のデータをBに書き出す。
> 3.Aを全行Bに書き出した後、Aを削除し、Bをリネームする。

やはり、ファイル全体を読み込まなくてはならないですか・・・。
編集を行いたい行だけのリード・ライトで処理するのは無理なようですね。

どうも、ありがとうございました。

投稿時間:2003/10/08(Wed) 20:50
投稿者名:NAO★
Eメール:
URL :
タイトル:
Re^3: CSVファイル、指定行編集
どういうデータがあるのかわかりませんが、
例えば、日付という項目があった場合に
年月などでデータファイルを分ければ
そのファイルだけを読み書きすればいいので
スピードは速くなりますね。

投稿時間:2003/10/09(Thu) 16:04
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re: CSVファイル、指定行編集
ようは、高速に書き替えができればいいのですから
FileSystemObject オブジェクトを使って

1.書き換える行までの文字数を取得する
  (文字数が解ればその文字数分だけ一気に読込む)
2.書き換える行までのデータを取得
3.書き換える行から末尾までのデータを取得
4.上記の2のデータと書き換えるデータと3のデータを1つにする
5.名前を変えて保存する

以上の方法で35列9900行(2.36MB)のファイルの5000行目の書換で 0.86秒
9000行目の書換で1.08秒でできました。
ちなみに上記ファイルを通常のLine Input 等で読込むと8分以上かかりました。
 
一度試して見て下さい。

投稿時間:2003/10/15(Wed) 19:17
投稿者名:でっち
Eメール:
URL :
タイトル:
Re^2: CSVファイル、指定行編集
すみません、出張にいってて返信が遅くなりました。

いろいろとアドバイスありがとうございます。
NOA★ さんのを参考に出来る限りデータを分割して作成するようにして
花ちゃん のを参考にいま処理を考えてるところです。8分が1秒位ですか!
これくらいになれば問題解決です。

がんばります!