アプリ版:「スタンプのみでお礼する」機能のリリースについて

こんにちは。Kakugariです。

 今、VBでエディタを作っていますがファイル操作でつまずいてしまいました。Commondialogからファイル名を取得して、そのファイルをMaintxtに表示するプログラムですがMaintxtに表示されるとき、Tabを使用してスペースを空けた部分が、無視されて文字が前に詰めて表示されます。それ以外は正常です。下にコードを載せましたので、お分かりになられる方は、間違いを指摘していただけたらありがたいです。ちなみにVB6です。Commondialogのプロパティは、デザイン時に設定されています。


Private Sub mnuOpen_Click()
  On Error GoTo ErrCode

  With CommonDialog1
    .DialogTitle = "開く"
    .ShowOpen
  End With

  Dim txt As String, Work As String
  Open CommonDialog1.FileName For Input As #1

  Do While Not EOF(1)
    Input #1, Work
    txt = txt & Work & vbCrLf
  Loop

  Close #1
  Maintxt = txt
  Exit Sub

ErrCode:
  Close #1
  MsgBox "ファイルは開けませんでした。", vbCritical
End Sub

A 回答 (3件)

txt = txt & Work & vbCrLf


の部分は、容量が大きいファイルを扱うと、容量の2乗に比例したオーダーで速度が低下します。
今回は、VBのActiveXコンポーネントを使い、容量の1乗に比例したオーダーでしか速度が低下しない方法をご提供♪
ちなみに、VB6以上での方法です。

メニューのプロジェクト→参照設定でMicrosoft Scripting Runtimeを追加

次のコードを標準モジュールに貼り付ける

'↓ここから

Private FS As New FileSystemObject

Public Property Get AFile(File As String) As String

On Error Resume Next
Dim Tx As TextStream

If FS.FileExists(File) Then

Set Tx = FS.OpenTextFile(File)
AFile = Tx.ReadAll
Tx.Close
Set Tx = Nothing

End If

End Property

Public Property Let AFile(File As String, Data As String)

On Error Resume Next
Dim Tx As TextStream

Set Tx = FS.OpenTextFile(File, ForWriting, True)
Tx.Write Data
Tx.Close
Set Tx = Nothing

End Property

'↑ここまで

使い方

Text1.Text = AFile("ファイル名")
で読み込み。

AFile("ファイル名") = Text1.Text
で書き込み。

ファイルを変数のように扱える様になります。
また、読み込み部分は、コンポーネントがバイナリで一気に読み込んでから、文字列に変換してくれるので、容量が大きいときでも速度があまり低下しません。

もちろん、VBのTextBoxは32k文字までしか表示できません。
    • good
    • 0
この回答へのお礼

詳しく教えていただき、ありがとうございます。
こちらの方法を使うことにしました。初心者なので、これからもお世話になると思いますが、よろしくお願いします。
本当にありがとうございました。

お礼日時:2002/02/09 14:47

こんにちは



自分はVB5ですが
「Input」を「Line Input」に変えたらきちんと動きましたよ
    • good
    • 0
この回答へのお礼

わざわざ調べていただき、本当にありがとうございます。
haporunさんの方法の方が実行速度が速くなるらしいのでそちらを使わせていただきます。
本当にありがとうございました。

お礼日時:2002/02/09 14:45

確認して貰いたいのですが



テキストコントロールのMULTILINEコントロールはTrueになっていますか?

この回答への補足

早速の回答ありがとうございます。
確認しましたが、もちろんTrueになっています。

それと、今、気付いたのですが行頭のスペースも無視されて詰められていました。(行頭のみで、文中のスペースは認識されています)

補足日時:2002/02/09 10:33
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!