• ベストアンサー

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

  • VBでファイル読み込み

    VBであるところにあるCSVファイルのデータを読み込みエクセルへ変換出力したいのですが教えてください。コモンダイアログボックス(?)と言うものを使って作成したいのです。よろしくお願いします。 がんばってやってみたのですがわかりません。教えてください。 Private Sub Command1_Click() Dim gnum(25), tensuu(32, 99) Dim sougouten(99), heikin(99), gouhi$(99) 'ファイルを開く On Error GoTo ErrHandler 'コモンダイアログボックス CommonDialog1.CancelError = True CommonDialog1.Filter = "すべてのファイル (*.*)|*.*|" _ & "テキスト ファイル (*.txt)|*.txt|バッチ ファイル (*.bat)|*.bat" CommonDialog1.FilterIndex = 2 CommonDialog1.ShowOpen With CommonDialog1 .FileName = "" .ShowOpen End With Exit Sub ErrHandler: ' ユーザーが [キャンセル] ボタンをクリックしました。 End Sub

  • ファイルを読み込んだらVBがフリーズする

    ↓のコードだと、ファイルを読み込んだ時点でVBがフリーズします(平気なファイルも一部ある)。原因と解決法を教えてください。 Private Sub Command1_Click() CommonDialog1.Filter = "テキスト(*.txt)|*.txt|すべて(*.*)|*.*" CommonDialog1.FilterIndex = 1 CommonDialog1.Flags = cdlONFileMustExist CommonDialog1.CancelError = True On Error Resume Next CommonDialog1.ShowOpen If (Err = 0) Then FileRead CommonDialog1.FileName End If On Error GoTo 0 End Sub Private Sub FileRead(FL As String) Dim FileNo As Integer Dim strDAT As String Dim strELM As String Dim pot1 As Integer, pot2 As Integer Dim pDB1 As Integer, pDB2 As Integer FileNo = FreeFile() Open FL For Input As #FileNo While Not EOF(FileNo) Line Input #FileNo, strDAT strDAT = strDAT & ":" pot1 = InStr(strDAT, ":") While pot1 > 0 strELM = Left(strDAT, pot1) pot2 = InStr(strELM, "OPEN") While pot2 > 0 pDB1 = InStr(strELM, Chr(&H22)) If pDB1 > 0 Then '前の『"』の位置 pDB2 = InStr(pDB1 + 1, strELM, Chr(&H22)) If pDB2 > 0 Then RichTextBox1.Text = RichTextBox1.Text & _ Mid(strELM, pDB1 + 1, pDB2 - pDB1 - 1) & vbCrLf End If End If pot2 = InStr(pDB2 + 1, strELM, "OPEN") Wend strDAT = Mid(strDAT, pot1 + 1) pot1 = InStr(strDAT, ":") Wend Wend Close #FileNo End Sub

  • ある文字列を検索するボタンのつくりかた

    あるテキストファイル(*.txt)の内容をテキストボックスに表示するボタンを作りました。さらに、このテキストファイルの内容の中から、決まった文字列のみを表示できるようにしたい(例.abcdefgと書かれたテキストに対してbcdのみ抜き出す)のですが、どうすれば良いのでしょうか。初心者なので、簡単にできる方法があれば教えてください。 <現在のコード> Dim myFile As String Private Sub Command1_Click() CommonDialog1.Filter = "テキスト(*.txt)|*.txt|すべて(*.*)|*.*" CommonDialog1.FilterIndex = 1 CommonDialog1.Flags = cdlONFileMustExist '既存ファイルのみ読み込み CommonDialog1.ShowOpen If CommonDialog1.FileName = "" Then Exit Sub myFile = CommonDialog1.FileName FileRead Form1.Caption = "Form1 " & myFile End Sub Private Sub Form_Load() Form1.Height = 3510 End Sub Private Sub FileRead() Dim buf As String On Error GoTo ErrTrap1 Open myFile For Input As #1 RichTextBox1.Text = "" While Not EOF(1) Line Input #1, buf RichTextBox1.Text = RichTextBox1.Text & buf & Chr(13) & Chr(10) Wend Close #1 Exit Sub ErrTrap1: MsgBox Err.Description Err.Clear End Sub

  • テキストの読込について

    あいうえお かきくけこ さしすせそ ↑のような中身のテキストファイルを読み込んで、 あいうえおかきくけこさしすせそ ↑のように、改行をなくして新規テキストに出力する プログラムを作成中なのですが、上手くいかず 困っています。 改行を無視した取り込みは出来るのでしょうか? もしくは、LineInput等で読み込んだ後、 改行を取り除くような処理をするのでしょうか? 下記は、現在まで作ったプログラムなのですが、 これだと、改行も同時に取り込んでしまっています。 Private Sub Command1_Click() Dim sData As String Dim FileName As String CommonDialog1.Filter = "テキスト|*.txt|全てのファイル|*.*" CommonDialog1.ShowOpen FileName = CommonDialog1.FileName Open FileName For Input As #1 Do Until EOF(1) Line Input #1, sData Loop Close #1 環境は、WindowsXP、VB6.0エンタープライズです。 以上、宜しくお願い致します<(_ _)>

  • VB6 名前を指定して保存する際に・・・

    こんにちわ。 ファイルを保存する際のコードを考えて作ったのですが、少し困ったので教えてください。 コードは・・・ With CommonDialog1 .CancelError = True .DialogTitle = "保存ファイル名指定" .DefaultExt = ".txt" .Filter = "テキストファイル(*.txt)|*.txt" .FilterIndex = 1 .ShowSave End With On Error GoTo aaa CommonDialog1.ShowSave Open CommonDialog1.FileName For Binary As #1 Put #1, , Text2.Text Close #1 Text2.Text = "" Exit Sub aaa: If Err.Number = 32755 Then MsgBox "キャンセル" End If これなんですが、text2の内容を保存する際に保存名を入れますが、一度保存OKを押すと「ファイル名.txt」となるのはいいんですが本当は1回OKを押した時点でtxtファイルとして保存できるようにしたいので、どなたか分かる方アドバイスお願いします。

  • 実行時エラー '32755' [キャンセル] ボタンが選択されました。 について

    ファイルを保存する時、キャンセルをするとタイトルどおりのエラーメッセージが出ます。当方、初心者でデバッグの仕方がわからず困ってます。どなたか教えてください。 コードの一部 Dim myFile As String Private Sub Command2_Click() CommonDialog1.Filter = "テキスト(*.txt)|*.txt|すべて(*.*)|*.*" CommonDialog1.FilterIndex = 1 CommonDialog1.Flags = cdlOFNOverwritePrompt '上書き確認する CommonDialog1.ShowSave '!!!デバッグの際はこの行が反転表示されます!!! If CommonDialog1.FileName = "" Then Exit Sub myFile = CommonDialog1.FileName FileWrite Form1.Caption = "Form1" & myFile End Sub Private Sub FileWrite() Dim buf As String Open myFile For Output As #1 Print #1, RichTextBox1.Text; '最後の';'は余計な複改を入れないため Close #1 Exit Sub End Sub

  • ファイルの読み込み

    CSVファイルを読み込んでAccessへ格納したいのですがどうしたら良いのでしょうか? ここまではできたのですが・・・・。 Private Sub Command1_Click() CommonDialog1.Flags = cdlOFNFileMustExist Or cdlOFNHideReadOnly CommonDialog1.ShowOpen End Sub

  • ExcelVBAマクロについて確認させてください。

    ExcelVBAマクロについて確認させてください。 テキストファイル内の全ての文字を読み込むプログラムですが、テキストファイルがUTF-8形式の場合は文字化けしてしまいます。 UTF-8形式の場合でも読み込める方法はありますでしょうか。 お手数おかけしますが、よろしくお願いします。 Sub test() Dim FSO As Object, buf As String Set FSO = CreateObject("Scripting.FileSystemObject") ''C:\Work\Sample.txtの全ての文字を読み込んで表示します With FSO.GetFile("C:\Work\Sample.txt").OpenAsTextStream buf = .ReadAll MsgBox buf .Close End With Set FSO = Nothing End Sub

  • CommonDialog でエラー

    OSとExcelを再インストールしたところ、下記のところでエラーが出ました。 なぜでしょうか。解決策はあるでしょうか。 以前は、使用できておりました。 Excelのマクロは、ほとんど理解しておりません。 他人が作成したマクロになります。 OS:WindowsXp Excel:2003 よろしくお願いします。 Private Sub CommandButton3_Click() Dim strArg() As String Dim i As Integer CommonDialog1.filename = ""   ←ここでエラーがでてとまります。 CommonDialog1.ShowOpen strArg = Split(CommonDialog1.filename, "\")  ごにょごにょ演算など。 End Sub

  • テキストボックスの中身をリセット(クリア)したい

    ファイル(*.txtのみ)を読み込んで、テキストボックスに中身を表示させておりますが、2回以上ファイルを読み込んだ時、テキストボックスに書かれた内容を消した上で、読み込んだファイルの中身を表示させるように変更できないでしょうか。また、テキストボックスに書かれた内容をクリアするボタンの作り方も知りたいです。 例、1.ABCと書かれたテキストの読み込み→ABC   とテキストボックスに表示される    2.XYZと書かれたテキストの読み込み→ABC XYZ とテキストボックスに表示される これを2.を読み込んだ時、ABCを表示せずにXYZと表示したい コードの一部 Private Sub Command1_Click() CommonDialog1.Filter = "テキスト(*.txt)|*.txt|すべて(*.*)|*.*" CommonDialog1.FilterIndex = 1 CommonDialog1.Flags = cdlONFileMustExist '既存ファイルのみ読み込み CommonDialog1.CancelError = True On Error Resume Next CommonDialog1.ShowOpen If (Err = 0) Then FileRead CommonDialog1.FileName End If On Error GoTo 0 End Sub

専門家に質問してみよう