• ベストアンサー

VBでエディタ

こんにちは。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

質問者が選んだベストアンサー

  • ベストアンサー
  • haporun
  • ベストアンサー率40% (230/562)
回答No.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文字までしか表示できません。

Kakugari
質問者

お礼

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

その他の回答 (2)

  • gould09
  • ベストアンサー率33% (196/589)
回答No.2

こんにちは 自分はVB5ですが 「Input」を「Line Input」に変えたらきちんと動きましたよ

Kakugari
質問者

お礼

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

  • gould09
  • ベストアンサー率33% (196/589)
回答No.1

確認して貰いたいのですが テキストコントロールのMULTILINEコントロールはTrueになっていますか?

Kakugari
質問者

補足

早速の回答ありがとうございます。 確認しましたが、もちろんTrueになっています。 それと、今、気付いたのですが行頭のスペースも無視されて詰められていました。(行頭のみで、文中のスペースは認識されています)

関連するQ&A