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

投稿時間:2004/02/07(Sat) 14:50
投稿者名:bantou
URL :
タイトル:
テキストファイルの読書
いつもお世話になっております。
さて、
 1行目に書き込み行数
 2行目以降にデータ
で最大30000行までのテキストファイルに対して
あるサブルーチンで、

@1行目の書き込み行数を取得
A@で読み込んだ行数+1行目のデータを新しいデータに書き換え
B1行目の行数をカウントアップ
Cファイルのクローズ

という手順を行いたいのですが、
よい方法はありませんか?

投稿時間:2004/02/07(Sat) 16:19
投稿者名:ak
Eメール:
URL :
タイトル:
Re: テキストファイルの読書
RichTextBoxを使用すれば楽にできますよ。

投稿時間:2004/02/07(Sat) 17:28
投稿者名:bantou
URL :
タイトル:
Re^2: テキストファイルの読書
> RichTextBoxを使用すれば楽にできますよ。
回答ありがとうございます。
ちなみに、RichTextBox以外で行う方法はありませんか?
原則的に書き込むを行う直前にファイルのオープンを
行おうと考えているのですけど大丈夫ですかね?

投稿時間:2004/02/10(Tue) 11:11
投稿者名:ak
Eメール:
URL :
タイトル:
Re^3: テキストファイルの読書
> ちなみに、RichTextBox以外で行う方法はありませんか?
> 原則的に書き込むを行う直前にファイルのオープンを
> 行おうと考えているのですけど大丈夫ですかね?

RichTextBoxの機能をご存知でしょうか?

下記の事を理解せずにRichTextBox以外での方法を探してい
るのであればまずはRichTextBoxのプロパティ、メソッドを
調べてください。

LoadFileプロパティでファイルを読み込む事ができます。

という事はOpenでファイルを開く必要が無い訳です。

行を追加する場合は
RichTextBox1.Text = RichTextBox1.Text & vbCrlf & "追加
する文字列"

行数は
Dim sData() As String
sData = Split(RichTextBox1.Text, vbCrLf)
Debug.Print Ubound(sData)
で取得できます。

という事は1行目に行数を入れる必要はありませんよね。

1行目だけ読めば何行あるかすぐに分かると考えたのかもし
れませんが行数がずれてしまうと永久にずれてしまいます。
全て読み込んで行数取得が基本かつ確実です。

1行目の行数を変更して最終行にデータを追加する事にとら
われずデータも含めて確実で効率的な方法を検討すべきでは
ないでしょうか?

あとはSaveFileプロパティを使用して保存すれば良い訳です。

投稿時間:2004/02/10(Tue) 13:58
投稿者名:bantou
URL :
タイトル:
Re^4: テキストファイルの読書
ご指摘ありがとうございます。

先頭行に行数を記載するのは要求仕様から決められているので、
この部分は「前提条件」になっているのです。

No.7932の条件も同様で、
実際にはTCP/IPのモニター・ログソフトのようなものを作ろうとしています。
「じゃあたかだか30000件のログぐらいでいいの?」
という指摘もあるのですが...

とにかく「軽い」ソフトにする必要があるので、
できればRichEditもつ買わない方法がないのかな?
ということです。

投稿時間:2004/02/10(Tue) 17:27
投稿者名:いちゆ
Eメール:
URL :
タイトル:
Re^5: テキストファイルの読書
ListBoxは?

投稿時間:2004/02/12(Thu) 08:51
投稿者名:bantou
URL :
タイトル:
とりあえず完了とします。
ご指摘ありがとうございます。
本当にわがままで申し訳ありませんが、
ソフトが異常処理した場合でも、
直前までの記録が残っている必要があります。
従いまして、
実行中も絶えずファイルに書き込んでおく必要があります。

...やはり仕様として難しいようなので、エンドユーザと相談してみます。
いろいろお騒がせして申し訳ございませんでした。m(__)m

投稿時間:2004/02/08(Sun) 12:15
投稿者名:Say
Eメール:
URL :
タイトル:
Re: テキストファイルの読書
機種依存文字(丸付き数字)は使用しないでください。

Open /Close ステートメントを使うにせよ、
FileSystemObjectを使うにせよ、
たかだか30000行なら、一気読みして
Splitで分割、必要な処理の後Joinで結合し一気書き込み、
という手もあります。

投稿時間:2004/02/09(Mon) 08:22
投稿者名:bantou
URL :
タイトル:
Re^2: テキストファイルの読書
回答どうもありがとうございます。

> 機種依存文字(丸付き数字)は使用しないでください。
すみません、以後気をつけます。

> Open /Close ステートメントを使うにせよ、
> FileSystemObjectを使うにせよ、
> たかだか30000行なら、一気読みして
> Splitで分割、必要な処理の後Joinで結合し一気書き込み、
> という手もあります。
こちらの方法も試して見ます。
ちなみに、
書き込み周期が1秒以下の間隔という場合でも問題ありませんか?

投稿時間:2004/02/10(Tue) 11:41
投稿者名:ak
Eメール:
URL :
タイトル:
Re^3: テキストファイルの読書
> 書き込み周期が1秒以下の間隔という場合でも問題ありませんか?

書き込み周期が1秒以下というの何をするつもりなのでしょうか?
VB内で保持しておいてあるタイミングで保存すれば済む話では無
いでしょうか?

作成したアプリケーションの速さはマシンのスペックOSの状態
(複数アプリ立ち上げ時など)によって異なりますので負荷のかかる
処理はやらない方が良いと思います。

投稿時間:2004/02/10(Tue) 20:31
投稿者名:Lantern
Eメール:
URL :
タイトル:
Re: テキストファイルの読書
こんにちは
仕様に合うか分かりませんが、1行目を固定長にしてもよければ
バイナリファイルで取り扱うこともできますよ。
C:\にhoge1.txtを作って
一行目に
"1                   " 1とスペース19個、改行1回
と書いて実行します。

Private Sub Command1_Click()
    Dim ff As Integer
    Dim sfile As String
    Dim sBuf As String * 20
    Dim lBuf As Long
    Dim sWrite As String
    
    sfile$ = "C:\hoge1.txt"
    sWrite$ = Me.Text1.Text
    ff% = FreeFile()
    Open sfile$ For Binary As #ff%
        Get #ff%, , sBuf$
        lBuf& = CLng(Val(sBuf$)) + 1
        sBuf$ = CStr(lBuf&)
        Seek #ff%, 1
        Put #ff%, , sBuf$
        Seek #ff%, LOF(ff%)
        Put #ff%, , sWrite$ & vbCrLf
    Close #ff%
End Sub

投稿時間:2004/02/12(Thu) 08:55
投稿者名:bantou
URL :
タイトル:
とりあえず完了とします。
ご指摘ありがとうございます。
この方法でやってみようと思います。
が、30000行をサイクリックに上書きする場合は
この方法でも無理ですよね?

...というわけで、エンドユーザと相談してみます。
いろいろお騒がして申し訳ございませんでした。m(__)m