テキストファイルをテキストボックスに読み込むときはいつも、
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
普通のテキストボックスのときはどうすればいいでしょうか?
宜しくお願い致します。
>のようにしているのですが、
>これでは最後に必ず改行が付いてしまいます。
自分で最後に改行つけてるのですから、当然の結果かと
そうしたくないのなら、
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
とするとか
ありがとうございます。
さっそく試させていただいたところ、今度はテキストファイルの最後に改行がある場合、その改行が消えてしまいました;;。
ファイルの内容と全く同じ文字列を取得したり保存したりしたいと思っておりまして。
宜しくお願い致します。
Line Inputは、行単位で文字列を取得します。
「ある行の文字列が欲しい」ってときに便利です。
「単純にすべての文字列データが欲しい」ということであれば、Input関数でよろしいかと。
(Input#〜とは違うので注意)
ご回答ありがとうございます。ご教授いただいた方法で下のようなプログラムを作ってみましたが、
テキストファイルの内容が半角文字だけの場合はうまく動くのですが、半角文字と全角文字の混ざり合ったものだったとき、
「ファイルにこれ以上データがありません。(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
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)
> 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
どうもありがとうございました。
失礼しました。
上のプログラムでは、C:\Test1.txtというファイルが既に存在している場合、上書き合成されてしまうということがわかりました。
例えば、
Text1.Text="123"で、C:\Test1.txtの内容が"aaaaa"のとき、
C:\Test1.txtの新しい内容は"123"にはならずに"123aa"になってしまいます。
ご注意ください!!
合成されないように書き込むにはどうすればいいでしょうか?ファイルを一旦削除するしかないのでしょうか?
保存のときは、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
> Print#で最後に";"を付けると改行は付きません。
Print#でもWrite#でも改行が付いたので、新しくファイルを作り直すしかないのかと思っていたら、そのような方法があったのですね。
読み込みも保存も完璧なプログラムを示していただいて、とても助かりました。
どうもありがとうございました。
ツイート | ![]() |