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

このQ&Aに関連する最新のQ&A

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で質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qサッシと窓の違い

サッシと窓の違いを教えてください。

サッシは枠、窓はガラスでしょうか?
それともサッシは掃きだし窓、窓は腰窓でしょうか?

Aベストアンサー

建設業に携わるものです。
サッシは枠、窓はガラスでしょうか?
この考え方でよろしいと思います。
掃出しも、腰窓も、窓は窓です。

QSubとEnd Subについて

VBScriptのSubとEnd Subについて教えて下さい。

Dim LogonID
Dim Password
Dim URL
Dim objIE
Dim objINPUT
Dim BodyText
Dim AriNashi

LogonID = "XXXXXXXX"
Password = "XXXXXXXXX"
URL = "https://login.yahoo.co.jp/config/login?.src=www&.done=http://www.ya..."

下記のようなプログラムはうまくいくのですがSubで囲むと何故か動作しなくなってしまいます。
使い方が間違っているのでしょうか?


Set objIE = WScript.CreateObject("InternetExplorer.Application")
objIE.Navigate URL
objIE.Visible = True

Do Until objIE.Busy = False
WScript.sleep(250)
Loop

If objIE.document.URL = URL Then
BodyText = objIE.document.body.innerTEXT
AriNashi = InStr(1, BodyText, "Yahoo")
If AriNashi > 0 Then
Set objINPUT = objIE.document.getElementsByTagName("input")
objINPUT(0).value = LoginID
objINPUT(1).value = Password
objINPUT(2).Click
Else
msgbox "NO"
End If
Else
WScript.Echo " ダ メ" & Err.Description
End If
Set objIE = Nothing

VBScriptのSubとEnd Subについて教えて下さい。

Dim LogonID
Dim Password
Dim URL
Dim objIE
Dim objINPUT
Dim BodyText
Dim AriNashi

LogonID = "XXXXXXXX"
Password = "XXXXXXXXX"
URL = "https://login.yahoo.co.jp/config/login?.src=www&.done=http://www.ya..."

下記のようなプログラムはうまくいくのですがSubで囲むと何故か動作しなくなってしまいます。
使い方が間違っているのでしょうか?


Set objIE = WScript.CreateObject("InternetExplorer.Application")
objIE.Navigate ...続きを読む

Aベストアンサー

Subで囲むとプロシージャとなります。
プロシージャは他から呼び出されない限り、勝手に動作はしません。

Sub Hoge
'実体
End Sub

と書いたなら、プロシージャの外で
Call Hoge()
のようにプロシージャを呼び出してあげてください。

Q窓の手のバージョンアップについて

窓の手が「窓の手 6.51」から「窓の手2004」にバージョンアップリリースされました。
早速利用しようと思うのですが、現在「窓の手 6.51」がインストール済みです。
バージョンアップはファイルをダウンロードして、そのまま上書きインストールで良いのでしょうか?
上書きで良い場合、「窓の手 6.51」で行っている設定は「窓の手2004」に引き継がれるんでしょうか?
ご存知の方、ご教示ください。

Aベストアンサー

窓の手のバージョンアップの場合は、そのまま上書きでかまいません。
設定も引き継がれます。
バージョン5辺りから使ってますが、私は今までそれで問題ありませんでした。

QSub-EndでConsole.Writeでコマンドプロンプト出力したい

VB.NET2003:WindowApplication の Sub~End で 出力Console.Write("***") としてもコマンドプロンプトウィンドウにでないで、.NETウィンドウのデバッグ欄にしか出ない。前もって何かを指定しなければならないのでしょうが全くわかりません。ConsoleApplication ではうまくいっていますが。初心者なのでよろしくお願いします。

Aベストアンサー

Windows Applicationは,コンソールを持ちません。
# AllocConsole API等を使えば,専用コンソールを持てますが。

コンソールへ出力したいのであれば,Console Applicationにする必要があります。
なお,Console ApplicationであってもWindows Formsを開く事は可能です。

Qリビングの窓の大きさ

現在新築予定のものです。

リビングの窓の大きさを考えているのですが、
アドバイスをお願いします。

このように考えています。やはり窓の大きさによって明るさに違いはでますか?

大きい窓メリット
明るい・開放感

大きい窓のデメリット
費用が高い・熱が逃げやすい

小さい窓のメリット
安価・熱効率がよい

小さい窓のデメリット
暗い

Aベストアンサー

明るさの違い、出ないはずがないです。
と、一般の方は考えますが、室内の明るさを決める要因は窓の大きさに限らず非常に多いものです。
思いつくまま書きますと・・・
・直射日光が入るか否か。
庇の出幅や、隣家の高さ、距離如何でその状況は激しく変わります。
・庭はコンクリートの如き白系か芝に覆われているか。
反射によっても激しく変わります。
・西に面しているか、はたまた北か。
西ですと直射日光が入りますが、親友である夏の熱射地獄君が同伴する事になります。
北ですと相当効率的な反射が見込めなければ夏涼しいのは良しとしても明るさはまず期待できない。

リビングの位置、窓の面する方位、庭との関係、などを考慮して選択すべきでしょう。
硝子でもROW-Eや複層により熱効率を操作する事は壁には敵いませんがある程度可能です。
他の捨て室は別としてもリビングはちょっと奮発されては?、無責任ながら考えます。

ちなみに南に面している場合、一般に暑い、と思われがちです。
が、夏の日射角度は大きいゆえ庇や屋根の出幅が900もあれば部屋に陽は入りません。(南中時(12時)ですよ、軒高さ3500位、一般的な寸法、冬は逆です、暖かい。)

質問者さんの見解は一般論として全て当たっていますが、この中の>大きい窓メリット・開放感、これを私は推したいですね。
大きな窓から尋ねて来る季節感溢れる花々や今ですと深い緑には心洗われるものです、少なくとも私はそうです。
コストの問題を除けば以上のようなアドバイスとなります。

プラン如何によりますが熟慮の後何かを削ってでも大きくする価値が有る、と考えればおせっかいながら背中を押しにお伺いしたいですね。

ご参考まで。

明るさの違い、出ないはずがないです。
と、一般の方は考えますが、室内の明るさを決める要因は窓の大きさに限らず非常に多いものです。
思いつくまま書きますと・・・
・直射日光が入るか否か。
庇の出幅や、隣家の高さ、距離如何でその状況は激しく変わります。
・庭はコンクリートの如き白系か芝に覆われているか。
反射によっても激しく変わります。
・西に面しているか、はたまた北か。
西ですと直射日光が入りますが、親友である夏の熱射地獄君が同伴する事になります。
北ですと相当効率的な反射...続きを読む

QVB6「コピー中のファイルをオープンしてinput #はするか?

VB6 WinXP等 ですが、(おそらくOSが)コピーしているファイルに対して(コピー先のファイル)をOPENしてinput #はするか(しないか)どうか疑問なのですが。当然、コピー先のファイルはコピー中なら不完全なので、OPENしてinput してしまうと不都合が生じるので。別のプロセスで開かれている場合はエラーが出るというですが・・・。大きなテキストファイルを作って自力でテストする必要があるでしょうか?OSの仕様に詳しいかたよろしくおねがいいたします。

Aベストアンサー

オープン時にロックかければよい。
コピー中のファイルはロックできずオープンエラーになる。

Q網戸と窓の動きがかたい 修理方法を教えてください

知人が購入検討中の中古マンションの、リビングからバルコニーへ出る窓の網戸がかたくて左右に動かすことができません。
また、ひとつの窓の、左側窓と右側窓の、左側窓のほうも動きがかたく、全く動かないほどではないですが動かすのにけっこうな力が必要です。
なお、リビング隣の和室からバルコニーにつながる窓側は、網戸・窓ともにまったくかたくはなく、動きは良好です。

このリビングの網戸と窓の動きを改善させるにはどうしたらいいでしょうか。

経験者の方や、こういう修理をされたことのある方、専門の方など、お詳しい方教えていただけると大変助かります。
よろしくお願いいたします。

Aベストアンサー

網戸は戸車を変えれば見違えるほど動きが良くなります。経験済みです。これは素人でも可能です。ネットで検索すれば直ぐに出てきます。
問題はサッシです、これは素人では無理と思います。現状引き渡しでは売り主に言っても無駄です。
サッシ屋(建具や)に見てもらうのが一番速いでしょう。

QLINE INPUT # の動作がExcel2002と2003で異なる

お世話になります。
色々な実行環境があるので苦労しています。

Excel2003とExcel2002で"LINE INPUT #"の動作が異なります。
(どちらもWindowsXpSp3上で動いています)

VBAでプログラムを書き、それぞれ(2003,2002)で動かしています。

読み込みファイルはCSV(行区切りは「0x0A])です。
このCSVファイルを"LINE INPUT #"で読み出すと、
Excel2003:「0x0A]を区切りに行単位でリードされる。
Excel2002:「0x0A]は無視されCSVファイル全体がリードされる。

コードは
---------------
dim strLineBuffer as String
ファイルオープン
Line Input #1, strLineBuffer
---------------
のような感じです。

ヘルプとかには「"LINE INPUT #"は「0x0A]は無視される」との
記載が多いですが、今、直面している場面では、
『「0x0A]は無視される』ものと『「0x0A]は無視されない』ものがあります。
とりあえずは、
FileSystemObjectのReadFile.readline
で2003も2002も同じ動作になりましたので、それを使用しています。

質問は、
「Excel2003とExcel2002で"LINE INPUT #"の動作が異なります。」が本当なのかどうなのかという点です。
開発環境によって色々なパッチやアップデートが行われているような状況です(把握しきれません)。

経験された方、情報をお持ちの方、よろしくお願します。

お世話になります。
色々な実行環境があるので苦労しています。

Excel2003とExcel2002で"LINE INPUT #"の動作が異なります。
(どちらもWindowsXpSp3上で動いています)

VBAでプログラムを書き、それぞれ(2003,2002)で動かしています。

読み込みファイルはCSV(行区切りは「0x0A])です。
このCSVファイルを"LINE INPUT #"で読み出すと、
Excel2003:「0x0A]を区切りに行単位でリードされる。
Excel2002:「0x0A]は無視されCSVファイル全体がリードされる。

コードは
---------------
dim...続きを読む

Aベストアンサー

>バイナリーエディターで何度も確認しました。
0Aの前に0Dがあれば、それは0D0Aなのですがそうはなっていないと
いうことですよね?
うーん。エクセルで適当なデータを作ってcsv保存しても改行コードは
0D0Aでしたし、メモ帳で作っても0D0Aだったんですけどね。。
どうすれば0Aになるのかが分かりませんね。
0D0AになればLINE INPUT #でも取り込めると思うのですが。。

あと気になるのは
>Excel2003:「0x0A]を区切りに行単位でリードされる。
てとこですが、私の場合バイナリエディタで改行コードを0Aにして試したら
CSVファイル全体が読み込まれました。(行単位で読まない)
同じexcel2003でも挙動が違うのは不可解です。

ちなみにコードは下記で試しました。参考までに。
Sub test()
Dim buf As String
Open "c:\work\aaa.txt" For Input As #1
Do Until EOF(1)
Line Input #1, buf
MsgBox buf
Loop
Close #1
End Sub

>バイナリーエディターで何度も確認しました。
0Aの前に0Dがあれば、それは0D0Aなのですがそうはなっていないと
いうことですよね?
うーん。エクセルで適当なデータを作ってcsv保存しても改行コードは
0D0Aでしたし、メモ帳で作っても0D0Aだったんですけどね。。
どうすれば0Aになるのかが分かりませんね。
0D0AになればLINE INPUT #でも取り込めると思うのですが。。

あと気になるのは
>Excel2003:「0x0A]を区切りに行単位でリードされる。
てとこですが、私の場合バイナリエディタで改行コードを...続きを読む

Q今から、窓の高さ変更可能なのか知りたい

新築、木造在来工法です。

筋交いや柱があり、木の枠ができ、その間にサッシがとりつけられました。
外には、紙が、貼ってあります。
窓の高さについては、こちらからは何もいわず、監督からも何も聞かれず、気が付いたら取り付けが終わっていました。
立面図はありますが、床からの高さはわかりませんでした。

東リビング W405×H770 上げ下げ窓が、窓の上辺が床から2メートルの位置にあり(標準な高さだそうです)低い身長なので、高すぎることに気が付きました。
標準窓は、すべて窓の上辺2mでつけました、と後でいわれ、その他の窓も、高い位置になり、想像外でした。(特にHが770、370の窓)

窓のサイズはそのままで、高さは、変更できますか。

監督には電話をしたのですが、社長と相談しますと、言われ返答待ちです。
工務店にも、大工さんにも手間をかけ、今から、高さを低くできるか心配です。

ご意見を、お聞かせください。
よろしくお願いいたします。

Aベストアンサー

確かに上端2,000mmの上端操作の窓は、我々チビには厳しいものがありますね。
木枠の位置を変更して窓を下に100mm程度ずらすという手もありますが、手間も費用もかかるし、視覚的にもおかしくなります。
 窓サッシを滑り出し窓( https://www.google.com/search?hl=ja&q=%E6%BB%91%E3%82%8A%E5%87%BA%E3%81%97%E7%AA%93&gws_rd=ssl&tbm=isch )や回転窓( https://www.google.com/search?hl=ja&q=%E5%9B%9E%E8%BB%A2%E7%AA%93&gws_rd=ssl&tbm=isch )に変更する。あるいは下端操作のスライド窓( https://www.google.com/search?hl=ja&q=%E4%B8%8A%E4%B8%8B%E3%82%B9%E3%83%A9%E3%82%A4%E3%83%89%E7%AA%93%20OR%20%E4%B8%8A%E3%81%92%E4%B8%8B%E3%81%92%E7%AA%93&gws_rd=ssl&tbm=isch )に変更するのが良いでしょう。その範囲なら、(施主の背が低いことを忘れていた(^^)で)交渉で安価に済むと思います。
 なお、横スライドの窓のクレセント位置--製作に入ってなければ変更できます。後からでも変更できますが跡は残ります。きれいにカバーはしてくれると思いますが。

確かに上端2,000mmの上端操作の窓は、我々チビには厳しいものがありますね。
木枠の位置を変更して窓を下に100mm程度ずらすという手もありますが、手間も費用もかかるし、視覚的にもおかしくなります。
 窓サッシを滑り出し窓( https://www.google.com/search?hl=ja&q=%E6%BB%91%E3%82%8A%E5%87%BA%E3%81%97%E7%AA%93&gws_rd=ssl&tbm=isch )や回転窓( https://www.google.com/search?hl=ja&q=%E5%9B%9E%E8%BB%A2%E7%AA%93&gws_rd=ssl&tbm=isch )に変更する。あるいは下端操作のスライド窓( https://www.google.co...続きを読む

Qsubプロシージャーですか?subステートメン

----------------
Sub test()

End Sub
----------------
は、subプロシージャーですか?subステートメントですか?

上記のコードの「Sub」にカーソルをあて、F1を押すとヘルプが立ち上がり「Sub ステートメント」と表示されますが、

挿入(I)→プロシージャー(P)を見ると画像のように「Subプロシージャー」となっています。

どちらが正しいのでしょうか?
どちらも正しいのでしょうか?

Aベストアンサー

Sub~という構文が「Subステートメント」。プログラミング言語では、ステートメントは「文」とも訳されます。
そのSub~End Subで定義した一連のものが「Subプロシージャ」。プロシージャは「手続き」とか言う意味。

だから、Subのヘルプを見ると、Subステートメントの書式などになってるし、
挿入→プロシージャでは、「手続き」とての一かたまりを挿入するから、End Subまでになる。


人気Q&Aランキング

おすすめ情報