プロが教える店舗&オフィスのセキュリティ対策術

メモ帳(.txt)に

AAAA
BBBB
CCCC

と書いて、これら3行をラベルに表示させたいのです。

Private Sub Form_Load()
 Dim myText As String
 Open "C:\myFile.txt" For Input As #1
Do While Not EOF(1)
Input #1, myText
Loop
  Close #1
 Label1.Caption = myText
End Sub

上記のコードだと1行目のAAAAしか表示されません(泣)
どなたかご指導宜しくお願いします。

A 回答 (6件)

質問の通り実行しましたが、Label1には 「CCCC」が表示されます。

AAAAが表示されるというのはちょっと考えられません。
ファイルを読むたびに、MyTextにその内容が入り、それがLabel1に送られるというロジックになっています。Labelを配列コントロールにしそこへ順番に送っていく必要があります。
    • good
    • 0
この回答へのお礼

回答ありがとうございます!!

間違いました(汗)
「CCCC」です。
申し訳ございませんでした。
配列コントロールについて調べてみます。
ありがとうございました!

お礼日時:2006/09/28 14:59

VB の学習中のようですので回答の全てを示すべきかどうか迷うところですが・・・。


幾つか気になった点がありましたので・・・。

1、FreeFile が使われていない。
2、FileSystemObject が使われていない。

1点目ですが、

Private Sub コマンド0_Click()
On Error Resume Next
  Dim I   As Integer
  Dim N   As Integer
  Dim myText As String

  N = FreeFile
  Open "C:\Temp\myFile.txt" For Input As #N
  Do While Not EOF(N)
    Input #1, myText
    I = I + 1
    Me.Controls("label" & I).Caption = myText
  Loop
  Close #N
End Sub

と、書いたが良いと思います。
ファイル番号をプログラム中に埋め込むと、チトまずいです。

2点目ですが、

Private Sub コマンド1_Click()
On Error Resume Next
  Dim I      As Integer
  Dim N      As Integer
  Dim strMyTexts() As String
  
  strMyTexts() = FileReadArray("C:\Temp\myFile.txt")
  N = UBound(strMyTexts)
  For I = 0 To N
    Me.Controls("label" & I + 1).Caption = strMyTexts(I)
  Next I
End Sub

と、非手続き的に書くスタイルを採用すればバグを相当に追放できます。

※FileSystemObject を用いるには、Microsoft scripting runtime を参照させる必要があります。

この回答への補足

回答ありがとうございます!!

間違いました(汗)「CCCC」です。
申し訳ございませんでした。

早速、FreeFileとFileSystemObjectについて勉強します。
また不明な点があれば宜しくお願い致します。

補足日時:2006/09/28 15:07
    • good
    • 0
この回答へのお礼

VB6.0を学習中です。
質問があるのですが、
Me.Controls("label" & I).Caption = myTextの
("label" & I)とはどういう意味なのでしょうか?
宜しくお願いします。

お礼日時:2006/09/28 16:40

#1さんの書かれている


> 質問の通り実行しましたが、Label1には 「CCCC」が表示されます。AAAAが表示されるというのはちょっと考えられません。
を拝見し、私も質問者さんのコードを見て同じ事を思いました。
このコードではLabel1.Captionへの値の代入がLoopの外で行われているので、myTextには最後のレコードである「CCCC」が入っているのと、
代入の対象をLabel1に固定してしまっています。
「AAAA」しか表示されないと言われているので、
一度、Label1の高さを広げてみてください。
案外、
AAAA
BBBB
CCCC
と表示されるかもしれません。
従って、実際に書かれているコードと質問文に書かれたコードとが微妙に異なっているのかも。
    • good
    • 0
この回答へのお礼

回答ありがとうございます!!

間違いました(汗)
「CCCC」です。
申し訳ございませんでした。
本当にすみませんでした。

お礼日時:2006/09/28 15:02

>Me.Controls("label" & I).Caption = myTextの


>("label" & I)とはどういう意味なのでしょうか?
Me.Controls("label1")と書くと、フォーム上の「label1」というラベルコントロールを表します。
それをループ中なので
"label" & I
と表したのです。
でもVB6.0なので、コントロール配列にすればいいと思いますよ。
Label1(I).Caption = myText
って感じでつかえます。

さて。補足要求なのですが、ラベル1つに対して、テキスト1行を表示なのですか?
それともラベルは1つしかなく、そこに全部表示?

1つのラベルに全部表示するなら、
>Label1.Caption = myText
ではなく
Label1.Caption = Label1.Caption & myText & vbCrLf
とし、Loopの中に書きます。
(最後に改行が1つ余分に入っちゃいますが・・。)

この回答への補足

#1さん、#2さん、#4さん回答ありがとうございました。
1つのラベルに3行すべて全表示させることができました。

また質問で恐縮なのですが、
フォームにボタンを追加して、それをクリックするたびに同じラベルに
別のテキストファイル(myFile2.txt、myFile3.txt、myFile4.txt)の内容を
順次表示させていきたいのです。
この場合、4つのテキストファイルのOpen→Input→Closeはどのようにしたらよいのでしょうか?
また、別の方法として、4つのテキストファイルを1つにまとめて、
任意の位置を読み込んでいく(ランダムアクセスファイル?)ことは可能でしょうか?

補足日時:2006/09/29 13:41
    • good
    • 0
この回答へのお礼

回答に対する補足訂正します。「#3さん」が抜けていました(汗)
#1さん、#2さん、#3さん、#4さん回答ありがとうございました。

お礼日時:2006/09/29 16:27

フォームの変数で


Private strTextFile(3) As String
を宣言。

フォームのLoadイベントで
strTextFile(0)にmyFile1.txtの内容。
strTextFile(1)にmyFile2.txtの内容。
strTextFile(2)にmyFile3.txtの内容。
strTextFile(3)にmyFile4.txtの内容。
を読んでおく。

ボタンのClickイベントで
Private Sub Command1_Click()
Static strNo As Integer

Label1.Caption = strTextFile(strNo)
strNo = (strNo+1) Mod 4
End Sub
とすれば、クリックする度に切り替わります。

--------------
ここまでがファイルが4つの場合。
1にファイルをまとめるなら、Loadイベントを工夫します。
例えば空行があるまでが1まとまりとしてstrTextFile()に1つ1つセットしていけば、ランダムアクセスの必要は無いでしょう。
例)myFile.txt
AAAA ←ここから
BBBB
CCCC ←ここまでstrTextFile(0)に読み込む

DDDD ←ここから
EEEE
FFFF ←ここまでstrTextFile(1)に読み込む

GGGG ←ここから
HHHH
IIII ←ここまでstrTextFile(2)に読み込む

JJJJ ←ここから
KKKK
LLLL ←ここまでstrTextFile(3)に読み込む

※「空行があるまでが1まとまり」というのは、あくまで例です。3行と決まってるなら、全部つめて3行読んだら次の配列に行くんでもOK。

この回答への補足

ありがとうございます!
「空行があるまで」というのはどのように書けばよろしいのでしょうか?
Do Whileで書こうとしたのですが条件式が分かりません。
何度も質問して申し訳ございません。

補足日時:2006/10/03 15:18
    • good
    • 0

こんな感じかなぁ。



Private Sub Form_Load()
Dim myText As String '読み込みバッファ
Dim N As Integer 'ファイルNo
Dim cntAll As Integer '全部を保存する配列数
Dim strOne() As String '1まとまり(「AAA,BBB,CCC」単位)保存用の配列
Dim cntOne As Integer '↑配列数

'初期化
myText = ""
cntAll = -1
cntOne = -1

N = FreeFile
Open "C:\tmp\myFile.txt" For Input As N
Do While Not EOF(N)
'1行読み込み
Input #N, myText

'空行でなければ1まとまり用の配列に保存
If Len(myText) > 0 Then
cntOne = cntOne + 1
ReDim Preserve strOne(cntOne)
strOne(cntOne) = myText
End If

'空行か、ファイルの終りになったら全体の配列用の配列に保存
If Len(myText) = 0 Or EOF(N) Then
cntAll = cntAll + 1
ReDim Preserve strTextFile(cntAll)

'配列strOneの内容を改行で区切って連結したものをセット
strTextFile(cnt) = Join(strOne, vbCrLf)

'次の為に1まとまり用の配列を初期化
cntOne = -1
Erase strOne
End If
Loop
Close #N
End Sub
    • good
    • 0
この回答へのお礼

回答ありがとうございます!!

何度も質問に答えてくれて感謝しています。
ありがとうございました。

お礼日時:2006/10/08 12:38

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