
メモ帳(.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しか表示されません(泣)
どなたかご指導宜しくお願いします。
No.4ベストアンサー
- 回答日時:
>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つにまとめて、
任意の位置を読み込んでいく(ランダムアクセスファイル?)ことは可能でしょうか?
回答に対する補足訂正します。「#3さん」が抜けていました(汗)
#1さん、#2さん、#3さん、#4さん回答ありがとうございました。
No.6
- 回答日時:
こんな感じかなぁ。
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
No.5
- 回答日時:
フォームの変数で
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で書こうとしたのですが条件式が分かりません。
何度も質問して申し訳ございません。
No.3
- 回答日時:
#1さんの書かれている
> 質問の通り実行しましたが、Label1には 「CCCC」が表示されます。AAAAが表示されるというのはちょっと考えられません。
を拝見し、私も質問者さんのコードを見て同じ事を思いました。
このコードではLabel1.Captionへの値の代入がLoopの外で行われているので、myTextには最後のレコードである「CCCC」が入っているのと、
代入の対象をLabel1に固定してしまっています。
「AAAA」しか表示されないと言われているので、
一度、Label1の高さを広げてみてください。
案外、
AAAA
BBBB
CCCC
と表示されるかもしれません。
従って、実際に書かれているコードと質問文に書かれたコードとが微妙に異なっているのかも。
No.2
- 回答日時:
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について勉強します。
また不明な点があれば宜しくお願い致します。
VB6.0を学習中です。
質問があるのですが、
Me.Controls("label" & I).Caption = myTextの
("label" & I)とはどういう意味なのでしょうか?
宜しくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
今、見られている記事はコレ!
-
弁護士が解説!あなたの声を行政に届ける「パブリックコメント」制度のすべて
社会に対する意見や不満、疑問。それを発信する場所は、SNSやブログ、そしてニュースサイトのコメント欄など多岐にわたる。教えて!gooでも「ヤフコメ民について」というタイトルのトピックがあり、この投稿の通り、...
-
弁護士が語る「合法と違法を分けるオンラインカジノのシンプルな線引き」
「お金を賭けたら違法です」ーーこう答えたのは富士見坂法律事務所の井上義之弁護士。オンラインカジノが違法となるかどうかの基準は、このように非常にシンプルである。しかし2025年にはいって、違法賭博事件が相次...
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
-
カスハラとクレームの違いは?カスハラの法的責任は?企業がとるべき対応は?
東京都が、客からの迷惑行為などを称した「カスタマーハラスメント」、いわゆる「カスハラ」の防止を目的とした条例を、全国で初めて成立させた。条例に罰則はなく、2025年4月1日から施行される。 この動きは自治体...
-
なぜ批判コメントをするの?その心理と向き合い方をカウンセラーにきいた!
今や生活に必要不可欠となったインターネット。手軽に情報を得られるだけでなく、ネットを介したコミュニケーションも一般的となった。それと同時に顕在化しているのが、他者に対する辛らつな意見だ。ネットニュース...
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
COLUMN(1:1)の意味を教え...
-
VB 配列の内容をファイルに書...
-
vbsでテキストファイル内の文字...
-
excelの、ある数式内の{}の意...
-
数値を浮動小数点32bitHEXコー...
-
配列の値を置換するにはどうす...
-
VB6で配列を文字列に変換する方...
-
Excel-vba 文字列と変数を...
-
Xorshiftの値を絞り込む方法を...
-
C言語 exitの使い方
-
VBAでダブルコーテーション入り...
-
Access2003 オートナンバーの現...
-
jsp~jspにhiddenを使って変数...
-
EXCEL/VBA 変数の値をクリップ...
-
フォームを開くときに、コンボ...
-
VB6.0-整数と余りを求める
-
ラジオボタンの値の取得につい...
-
フリーランタイマーの時間差分...
-
平均、最大値、最小値を表示す...
-
バッチファイルで正規表現を使...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
配列の値を置換するにはどうす...
-
excelの、ある数式内の{}の意...
-
COLUMN(1:1)の意味を教え...
-
VBAのWorksheetFunctionの引数...
-
エクセル、この関数の意味は?
-
RichTextBoxの改行を認知してく...
-
vbsでテキストファイル内の文字...
-
○桁にある数値を取得する VB.N...
-
複数ディレクトリの監視(VB.NET...
-
エクセルへのデータの貼付時に...
-
数値を浮動小数点32bitHEXコー...
-
VBSで特定の文字列が含まれる場...
-
【エクセル】 関数による電子...
-
VB 配列の内容をファイルに書...
-
小数点の表示。
-
VBAで配列に文字列が入らない?
-
in_addrからchar型の文字列の変換
-
配列の座標指定について。
-
ループを違う条件で抜けるよう...
-
初心者プログラミング
おすすめ情報