OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

VBでエディタ

  • 困ってます
  • 質問No.214577
  • 閲覧数113
  • ありがとう数2
  • 気になる数0
  • 回答数3
  • コメント数0

お礼率 80% (72/90)

こんにちは。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
通報する
  • 回答数3
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.3
レベル12

ベストアンサー率 40% (230/562)

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

お礼率 80% (72/90)

詳しく教えていただき、ありがとうございます。
こちらの方法を使うことにしました。初心者なので、これからもお世話になると思いますが、よろしくお願いします。
本当にありがとうございました。
投稿日時 - 2002-02-09 14:47:29
-PR-
-PR-

その他の回答 (全2件)

  • 回答No.1
レベル12

ベストアンサー率 33% (196/589)

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

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

お礼率 80% (72/90)

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

それと、今、気付いたのですが行頭のスペースも無視されて詰められていました。(行頭のみで、文中のスペースは認識されています)
投稿日時 - 2002-02-09 10:33:30


  • 回答No.2
レベル12

ベストアンサー率 33% (196/589)

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

自分はVB5ですが
「Input」を「Line Input」に変えたらきちんと動きましたよ
お礼コメント
Kakugari

お礼率 80% (72/90)

わざわざ調べていただき、本当にありがとうございます。
haporunさんの方法の方が実行速度が速くなるらしいのでそちらを使わせていただきます。
本当にありがとうございました。
投稿日時 - 2002-02-09 14:45:26
このQ&Aのテーマ
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ