ログをテキストファイルに保存する方法

解決


美保  2007-12-06 23:58:20  No: 99893

通信データのログを取ってファイルに保存します。最初はログデータをエクセルのセルに順に入れて、プログラム終了時に名前を付けてファイルを保存していました。ところが、エクセルのインストールされていないPC用にファイルをテキストファイルに変更することになりました。

1  ファイルオープン(名前を付けて・・)
2  データ書き込み
3  ファイルクローズ

で実現できますが、これだと最初に名前を付けてファイルをオープンさせないといけません。エクセルの場合インスタンスを作成してデータを保存した後、最後に名前を付けて保存させていましたので、操作が違ってしまいます。エクセルの場合と同じようにすることは出来るのでしょうか?

エクセルの場合
1  インスタンス作成
2  データ書き込み
3  名前を付けてファイルを保存


特攻隊長まるるう  2007-12-07 00:02:23  No: 99894

>エクセルの場合インスタンスを作成してデータを保存した後
書込みしてるだけで、保存されてないんじゃないかと思うけど。。。

変数に覚えておけばいいだけでは?


美保  2007-12-07 00:37:35  No: 99895

特攻隊長まるるう様

エクセルの場合は問題なく動作しています。

>変数に覚えておけばいいだけでは?
ログを変数にして後でまとめてファイルに書き込むと確かに思惑通りの動作になりますが、データ量が多い場合対応できないと言うことは無いでしょうか?


特攻隊長まるるう  2007-12-07 04:26:30  No: 99896

>データ量が多い場合対応できないと言うことは無いでしょうか?
それって、どんなデータが何件くらい想定されて。。。ってのがシステム設計とか
仕様によって決まって、それをメモリ上に記憶するとどのくらいメモリ使用量が
増えてってのはテストすれば分かるって話だよね?

質問しなきゃ解決できない内容は何?

また、仕様も分からない回答者が判断できる内容はどれ?


スクリプトプログラマ  2007-12-07 05:10:08  No: 99897

適当な名前のファイルにいったん書き出して、
最後にユーザ指定の名前に移動するだけでよいような気がしますが。


美保  2007-12-07 18:19:06  No: 99898

特攻隊長まるるう様

ある実験を行いそのときの温度変化などをモニタし記録します。最後に実験結果とモニタされた結果をまとめて実験データとします。条件を変えて化学変化を観察するので、あるときは10分で終わり、別の条件では3日かかる場合もあります。最初にログのファイル名を決めても良いのですが、できたら最後に実験結果に基づいた名前にしたいと考えています。

スクリプトプログラマ様

そうですね。最初にその方法を考えたのですが、エクセルの時は保存の時に名前を付けることが出来たので同じように出来ないものかと思って質問しました。他に方法が無ければそうしたいと思います。


えほ  2007-12-07 19:06:59  No: 99899

内容を見る限りだと、どーしても、最後にファイル名を決めて保存にする必然性はないような気がします。

まずそれほど起こらないでしょうが、メモリ上にずっと残していて、何かの問題でアプリケーションが強制終了してしまった場合にデータがなくなる心配もありますし、一時的に出力して、最後に、名前を変えて保存(コピー)すればいいと思いますよ。

きちんとやりたい動作が出来るなら、メモリ上でも一時ファイルでも変わりないんじゃないかなと思う私はおかしいのかな。


特攻隊長まるるう  2007-12-07 19:21:37  No: 99900

他の方の指摘と同じ内容になりますが、

>別の条件では3日かかる場合もあります。
その間に再起動とかしたら、エクセルのデータも消えるのでは?
# 観察を中断すると最初からやり直しになるのかもしれないけど、
# 実行できた所までのログは欲しいですよね。
つまり、エクセルの処理自体にも問題があるのでは?

ユーザの Application Data フォルダとかにログ更新毎(1件ごと)
に書き出しておくべきでしょう。
>保存の時に名前を付けること
それは一時ファイルに保存しててもできますからね。


美保  2007-12-07 19:39:32  No: 99901

えほ様、特攻隊長まるるう様

ありがとうございます。
VBのプログラムは、単にログを採っているだけでなく、温度コントローラなどの制御も行っています。つまり実験条件の設定、制御と実データの収集です。だから、PCが再起動などしたら、実験もそこで中断されてしまいます。最後まで行かなかった実験は意味が無いので、データも不要となります。説明不足で申し訳ありませんでした。
簡単に言うと、Aと言う物質が、BまたはCに変化しますが、条件によってBとCの割合が変わります。それを調べるのですが、実験の終了時にファイル名にその結果が分かるような名前にし、結果によって保存するフォルダを分けていたので同じことをやりたかったのです。そちらの方が都合が良いというだけで、仰るように必然性はありません。ただ、エクセルで出来ていたので同じことが出来ないかと考えました。エディタなども保存時に名前を付けるのでやり方があるのなら知りたいと思って質問させてもらいました。
どうしても解決したくて困ってるわけではないので、とりあえず教えていただいた方法でやりたいと思います。名前を変更する方法が分からないので、調べてみてスクリプトプログラマ様の言われた方法を検討したいと思います。


特攻隊長まるるう  2007-12-07 20:12:46  No: 99902

>エクセルで出来ていたので同じことが出来ないかと考えました。
>エディタなども保存時に名前を付けるのでやり方があるのなら
>知りたいと思って質問させてもらいました。
エクセルも Excel.exe っていうプログラムなわけで、画面に
表示されているものと保存ファイルは違います。表示されている
間はメモリ上にデータがある状態ですね。ま、編集中のバック
アップの設定もできますが、それはローカルに一時ファイルが
作成されますよね。

今回の記録プログラムで言えば、自分自身が Excel.exe にあたります。
つまり、画面上にテキストボックスを用意して、そこにログを出力
していく。。。保存ボタンでテキストファイルのパスを指定して
ファイル保存です。これが Excel と同じ動きという解釈となります。

Excel.exe とエクセルの保存ファイルの2つの存在を、テキストファイル
の操作のみと比較してる時点で間違ってます。

画面(テキストボックス)に表示しないなら変数に覚えることと同じです。
変数を1つの文字列で覚えるか、ログ1件ごとに文字列をコレクション
していくようなクラスにするとか、覚え方の工夫はあるでしょうが、
それも含めて、自分でプログラムしないといけない部分です。

>エディタなども保存時に名前を付けるのでやり方があるのなら
通常、単体で動かすならそのような動きをしますよね?
# エディタとテキストファイルをちゃんと区別してくださいね?
# プログラムと保存ファイルは別の存在です。
ただ、VB から Excel のように操作できるようなライブラリが
提供されているかどうかが重要ですよね。そのエディタを VB
が操作できる手段が用意されているかどうかです。

>名前を変更する方法が分からないので
ファイルを操作できるクラスなら、コピーする時に名前の指定が
できるようになっていると思います。
同一フォルダでリネームする方法もあるでしょうし。


美保  2007-12-07 20:51:01  No: 99903

特攻隊長まるるう様

良く分かりました。確かにそうですね。テキストファイルとエディタと言うプログラムを同じように考えていたことが間違えでした。わかってしまえば当たり前ですね。今回はどうもありがとうございました。


スクリプトプログラマ  2007-12-07 23:39:13  No: 99904

どうも、もうひとつよい方法と思われていないようですが、(なぜかなぁー)
これが一番よい方法だと思います。。。

誤解があるかも知れないので補足。
コピーでなく、移動を使う。
ドライブ内の移動はリネームになる。
もしドライブ間の移動でもシーケンシャルread/writeなのでハード上限速度になる。


美保  2007-12-08 00:11:41  No: 99905

スクリプトプログラマ様

そんなことないですよ。ちゃんと納得しましたから。このプログラムそのものがエディタと考えないといけないと言うことですよね。ただ、「メモ帳」をエクセルのように操作する方法もあるのかな・・と思ってますけど。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加