テキストの読込について

解決


  2005-07-10 00:53:40  No: 123356

VB6.0で日記のソフトを作ろうとしているのですが、
データを書き込む時に困ったことが起きてしまい
悩んでいます。ご教授頂けたらと思いカキコしました。

データの形式は
・日付
・内容
という形です。

日付をListboxに表示し、それに対応した内容をを別のTextboxに表示したいのですが、どういうアルゴリズムで読込を行えば良いのでしょうか?
日付としてのフラグとして「@」を行頭に入れています。
また日付の行はLine Inputで読み込んでいます。

と、ここまで日付をListboxに表示していく所まで出来たのですが、
内容をTextboxに表示させるには、どうしたら良いでしょうか?

参考にすると良いサイト等・的確なアドバイスを是非よろしくお願いいたします。


通ってみた  2005-07-10 01:38:21  No: 123357

Line Input #x,dammy

List1.AddItem dammy

Do Until EOF(x)
    Line Input #x,dammy
    Text1.Text = Text1.Text + dammy + VbCrLf
Loop

Close #x

とか


通ってみた  2005-07-10 01:48:11  No: 123358

あ、ファイルをOpenしてあって、テキストボックスがクリア(Text1.Text = "")してあるという仮定ね

まぁ他にも工夫は必要だろうね


  2005-07-10 02:31:02  No: 123359

通ってみた さん>
レスありがとうございます。
・日付
・内容
・日付
・内容
・日付
・内容
ってデータの場合、上手くListboxに日付だけ出ないんですが
どうしたら良いでしょうか?

あと、Listboxをダブルクリックした時に、
Private Sub List1_DblClick()に内容を表示したいのですが、
実際にはどのように書いたら良いのでしょうか?
一度、読み込んで配列にプールしておかなければならないのでしょうか?
実際に長い内容のデータだった場合には、String型でも問題ないのでしょうか?

質問ばかりで申し訳ありません。
VBは独学で3年位です。
よろしくお願いいたします。


通ってみた  2005-07-10 03:01:52  No: 123360

データの形式を変えた方がいいのでは?
ファイル名を日付にして、中身を本文にして1日1ファイルにした方がいいと思うが


通ってみた  2005-07-10 03:15:57  No: 123361

現状のデータ形式でやるとして、一応案を。

データを書き込む時に、本文の最後の行に「@End」というような終了データを加える。

Do Until EOF(x)
'日付
    Line Input #x , dammy
    List1.AddItem dammy
'本文
    Do
        Line Input #x , dammy
        If Left$(dammy , 4) = "@End" Then
            Exit Do
        End If
    Loop
Loop

Close #x

こんな感じ。

内容表示は、Private Sub List1_DblClick()内でLine Inputで「@End」が選ばれた日付の場所の回数来るまで読み込んでやる
そこから以下のようにすればいい

    Do
        Line Input #x , dammy
        If Left$(dammy , 4) = "@End" Then
            Exit Do
        End If
        Text1.Text = Text1.Text + dammy + VbCrLf
    Loop


LESIA  2005-07-10 13:42:15  No: 123362

本文は配列にいれるといいかもしれません。
コレクションでもいいかも。

Private strDiary() As String

Private Sub ReadDiary()
    Dim iFileNo As nteger
    Dim strFileName As String
    Dim strBuffer As String
    Dim i As Integer

    List1.Clear
    Erase strDiary

    i = -1
    iFileNo = FreeFile
    strFileName = "C:\日記.txt"
    Open strFileName For Input As #iFileNo
    Do Until EOF(iFileNo)
        Line Input #iFileNo, strBuffer
        If Left$(strBuffer, 1) = "@" Then
            List1.AddItem Mid$(strBuffer, 2)
            i = i + 1
            ReDim Preserve strDiary(i)
        Else
            strDiary(i) = strDiary(i) & strBuffer & vbCrLf
        End If
    Loop
    Close #iFileNo
End Sub

Private Sub List1_DblClick()
    Text1.Text = strDiary(List1.ListIndex)
End Sub


  2005-07-10 19:49:36  No: 123363

通ってみたさん
LESIAさん

ありがとうございます。
具体的なソースを拝見して、自分なりに読み解きながら、
いままで、プログラムを組んでいました。

動的配列を用いてPreserve付けて配列の内容を維持しながらって所が
すごく勉強になりました。今までは無理矢理動かしていた部分もあったので。

あと
List1.AddItem Mid$(strBuffer, 2)
これで、2文字目から終端まで取れることも初めて知りました。

完成に至りましたので、ご報告とともにお礼を申し上げます。
本当にありがとうございました。


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

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






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