テキストファイルをテキストボックスに読み込むには?

解決


KinKin  2007-01-30 05:15:51  No: 135081

テキストファイルをテキストボックスに読み込むときはいつも、
    file1 = "C:\Test.txt"
    Open file1 For Input As #1
        Do While Not EOF(1)
            Line Input #1, TextLine     
            a = a & TextLine & vbCrLf
        Loop
    Close #1
    Text1.Text = a
のようにしているのですが、
これでは最後に必ず改行が付いてしまいます。
テキストファイルの内容の全体を、そっくりそのまま1つのテキストボックスに読み込んだり、逆に、テキストボックスの内容を、そっくりそのままテキストファイルに保存する方法はないでしょうか?
リッチテキストボックスのときは簡単に次のように出来るのですが、

RichTextBox1.LoadFile "C:\Test.txt", rtfText
RichTextBox1.SaveFile "C:\Test.txt", rtfText

普通のテキストボックスのときはどうすればいいでしょうか?

宜しくお願い致します。


通ってみた  2007-01-30 19:01:58  No: 135082

>のようにしているのですが、
>これでは最後に必ず改行が付いてしまいます。

自分で最後に改行つけてるのですから、当然の結果かと
そうしたくないのなら、

ex)[VB6]
file1 = "C:\Test.txt"
fn = FreeFile
Open file1 For Input As #fn
    Line Input #fn, a
    Do While Not EOF(fn)
        Line Input #fn, TextLine     
        a = a & vbCrLf & TextLine
    Loop
Close #fn
Text1.Text = a

とするとか


KinKin  2007-01-31 00:57:54  No: 135083

ありがとうございます。
さっそく試させていただいたところ、今度はテキストファイルの最後に改行がある場合、その改行が消えてしまいました;;。
ファイルの内容と全く同じ文字列を取得したり保存したりしたいと思っておりまして。

宜しくお願い致します。


黒頭巾  2007-01-31 02:34:28  No: 135084

Line Inputは、行単位で文字列を取得します。
「ある行の文字列が欲しい」ってときに便利です。

「単純にすべての文字列データが欲しい」ということであれば、Input関数でよろしいかと。
(Input#〜とは違うので注意)


KinKin  2007-01-31 03:09:49  No: 135085

ご回答ありがとうございます。ご教授いただいた方法で下のようなプログラムを作ってみましたが、
テキストファイルの内容が半角文字だけの場合はうまく動くのですが、半角文字と全角文字の混ざり合ったものだったとき、
「ファイルにこれ以上データがありません。(Error 62)」
というエラーが出ます。
つまり、テキストファイルの全文字数を特定できないのでこの方法だと読み込めないようです。

    file1 = "C:\Test.txt"
    
    MySize = FileLen(file1)
    
    Open file1 For Input As #1    
    Do While Not EOF(1)             
        MyChar = Input(MySize, #1)         
    Loop
    Close #1                         
    Text1.Text = MyChar


LESIA  2007-01-31 06:36:07  No: 135086

FileLen関数が返すのは全文字数ではなく、全バイト数です。

    file1 = "C:\Test.txt"
    
    MySize = FileLen(file1)
    
    Open file1 For Input As #1    
        MyChar = InputB(MySize, #1)         
    Close #1                         
    Text1.Text = StrConv(MyChar,vbUnicode)


KinKin  2007-01-31 08:20:38  No: 135087

> MyChar = InputB(MySize, #1) 
   
> Text1.Text = StrConv(MyChar,vbUnicode) 

こんな方法があるとは知りませんでした。
おかげさまで、保存の方も次のようなシンプルなプログラムで出来ました。

    Dim a() As Byte

    a() = StrConv(Text1.Text, vbFromUnicode)
    
    file1 = "C:\Test1.txt"
    Open file1 For Binary As #1
        Put #1, , a
    Close #1

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


KinKin  2007-01-31 10:28:41  No: 135088

失礼しました。
上のプログラムでは、C:\Test1.txtというファイルが既に存在している場合、上書き合成されてしまうということがわかりました。
例えば、
Text1.Text="123"で、C:\Test1.txtの内容が"aaaaa"のとき、
C:\Test1.txtの新しい内容は"123"にはならずに"123aa"になってしまいます。

ご注意ください!!


KinKin  2007-01-31 11:11:55  No: 135089

合成されないように書き込むにはどうすればいいでしょうか?ファイルを一旦削除するしかないのでしょうか?


LESIA  2007-01-31 14:44:53  No: 135090

保存のときは、BinaryモードではなくOutputモードでいいのでは?
Print#で最後に";"を付けると改行は付きません。

ファイル番号は#1固定ではなく、FreeFile関数で取得した方がいいです。

Dim s As String
Dim iFileNo As Integer
Dim strFileName As String

s = TextBox1.Text

iFileNo = FreeFile
strFileName = "C:\Test1.txt"
Open strFileName For Output As #iFileNo
    Print #iFileNo, s;
Close #iFileNo


KinKin  2007-01-31 19:29:25  No: 135091

> Print#で最後に";"を付けると改行は付きません。
 
Print#でもWrite#でも改行が付いたので、新しくファイルを作り直すしかないのかと思っていたら、そのような方法があったのですね。

読み込みも保存も完璧なプログラムを示していただいて、とても助かりました。
どうもありがとうございました。


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

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






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