• ベストアンサー

ラベルに全てのテキストデータを読み込みたい

メモ帳(.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つ余分に入っちゃいますが・・。)

popkonsome
質問者

お礼

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

popkonsome
質問者

補足

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

その他の回答 (5)

回答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

popkonsome
質問者

お礼

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

回答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。

popkonsome
質問者

補足

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

noname#79209
noname#79209
回答No.3

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

popkonsome
質問者

お礼

回答ありがとうございます!! 間違いました(汗) 「CCCC」です。 申し訳ございませんでした。 本当にすみませんでした。

noname#22222
noname#22222
回答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 を参照させる必要があります。

popkonsome
質問者

お礼

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

popkonsome
質問者

補足

回答ありがとうございます!! 間違いました(汗)「CCCC」です。 申し訳ございませんでした。 早速、FreeFileとFileSystemObjectについて勉強します。 また不明な点があれば宜しくお願い致します。

noname#24731
noname#24731
回答No.1

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

popkonsome
質問者

お礼

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

関連するQ&A

  • 以下の様なファイルの中身から重複を取り除いて表示したいのですが、

    以下の様なファイルの中身から重複を取り除いて表示したいのですが、 awk 'NR==1||prev!=$0;{prev=$0}' file.txt の使い方を教えてください。 何故、重複を除いて表示できるのですが。 printなどを使っていないのに表示ができているのですか。 file.txt 以下中身 ---------------------- AAAA BBBB BBBB CCCC CCCC ----------------------- ↓ AAAA BBBB CCCC の3文字のみを出力したい。

  • 配列にて格納したデータの出力

    txtファイルで取り込んだ2行にまたがっている数値・英文字・ひらがななどを1行ずつ配列として格納した後に、数値だけのtxtファイルとそれ以外のtxtファイルを別々に作成し、保存するプログラムを組みたいのですがよく分かりません。 ちなみに、使っているOSとAPはWinXP、Excel2003です。 InputData.txtの内容 A34bFg7p0 あ 1ylut890 B45LK4L え Number.txtの完成形 34701890 454 String.txtの完成形 AbFgp あ ylut BLKL え '変数の宣言 Dim myFile, myText, myList(), myList2(), str, B, C As String Dim XX As Integer Dim myFunc As Boolean Dim cnt, i As Long On Error GoTo myError myFile = Dir("InputDama.txt") 'ファイルの読み込み If myFile = "InputDama.txt" Then Open myFile For Input As #1 Do While Not EOF(1) Line Input #1, myText If myText <> "" Then If cnt = 0 Then ReDim myList(cnt), myList2(cnt) Else ReDim Preserve myList(UBound(myList) + 1), myList2(UBound(myList2) + 1) End If '数字・文字列の分類 CC = Len(myText) For XX = 1 To CC str = Mid(myText, XX, 1) If IsNumeric(str) = True Then '←数字かどうかはIsNumericで判断 B = B & str Else C = C & str End If Next myList(cnt) = B myList2(cnt) = C cnt = cnt + 1 End If Loop '書き込みファイルの作成 Open "Number.txt" For Output As #2 Open "String.txt" For Output As #3 For cnt = 0 To UBound(myList) Print #2, myList(cnt) Next cnt For cnt = 0 To UBound(myList2) Print #3, myList2(cnt) Next cnt Close #1, #2, #3 End Sub これだと、2行目に1行目で格納したデータが最後出てしまうので、それを取り除きたいのですが、効果的な方法が分かりませんので、宜しくお願いします。

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

    あるテキストファイル(*.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

  • PHP 読み込んだファイルのブラウザ表示につい

    読み込んだTXTファイルの内容をブラウザに表示したいと思っています。 TXTファイルには aaaa bbbb cccc が入っています。 読み込んだデータを <?php $data = fopen("test.txt","r"); fpassthru($data); ?> でブラウザに表示しようとすると {\rtf1\ansi\ansicpg932\cocoartf1038\cocoasubrtf350 {\fonttbl\f0\fswiss\fcharset0 Helvetica;} {\colortbl;\red255\green255\blue255;} \paperw11900  ~ 省略 ~  \cf0 aaaa\ bbbb\ cccc} と最後にTXTの中身がありますが、余計なものも一緒に表示されてしまいます。 aaaa bbbb cccc と表示させるにはどうすればよいでしょうか?

    • ベストアンサー
    • PHP
  • グループ単位で空白行を挿入するVB

    下記の様に番号順にまとまったデータがある場合に その番号が違う番号になった時に空白行を1行挿入したいのですが 良い方法があればご教授下さい。 お願い致します。 <<例>> (実行前)  番号 DATA1 DATA2 1  1  aaaa bbbb 2  1  aaaa cccc 3  2  bbbb bbbb 4  3  cccc bbbb (実行後) 1  1  aaaa bbbb 2  1  aaaa cccc 3  2  bbbb bbbb 4  3  cccc bbbb 以上です。

  • ACCESSのフォーム上に連番番号を表示したい

    お世話になります フォームは単票型でなく、表型です↓ 例 1 aaaa1 bbbb1 cccc1 2 aaaa2 bbbb2 cccc2 3 aaaa3 bbbb3 cccc3 aaaa1等、右側はテーブルからデータを表示しています この、左の1,2,3、は単なる、表示で関連付けるデータは ありません この単なる1,2,3、はどのようにだすのですか よろしくお願いします

  • EXCEL VBAでテキストファイルの特定の場所にデータを書き込む方法

    エクセルVBAのテキスト操作について質問なのですが、以下のようなテキストファイルがあったとしてKey1とKey2の間にデータを書き込みたいのですがどのようにすれば宜しいでしょうか。 宜しくお願い致します。 --- test.txt ここから --- aaaa bbbb Key1 cccc (ここにデータを書き込みたいです。) Key2 eeee --- test.txt ここまで ---

  • ブロックの管理

    oracleなどのデータベースのブロック管理について ブロック内はブロック管理用領域と行データとで構成されてますが 更新後のブロック内の行データはどのように管理されているか教えてください。 1AAAA2BBBB3CCCC4・・・・・と順編成で行データが入れられていって 途中で2行目のデータをBBBBRRRRと更新する場合、2BBBBの後ろに挿入されず離れた場所の、空き領域にRRRRが書かれる状態で管理されるのでしょうか?1AAAA2BBBB3CCCC4・・・・・空き領域2RRRR それとも1AAAA2BBBBRRRR3CCCC4・・・・・ と3行目以降をずらしてBBBBの後ろに挿入するように更新されるのでしょうか?

  • vb6.0 sp5]読み込みが出来ない・・・

    マルチラインのtext1に20行くらいの文章を 入れて、保存します。tes.txt a = text1.text そのtes.txt自体を開くとキチンと文章が入っています。 しかしプログラムからそのファイルを開くと。 Open "tes.txt" For Input As #1 Line Input #1, a Close #1 Label1.Caption = a 最初の一行しか表示されません。T_T;

  • サクラエディタのマクロで外部から取り込んで

    以下のようなことをしたいのですが、サクラエディタのマクロでできますでしょうか? またそれ以外の方法でも構いません。 <ファイル1> AAAA BBBB CCCC ・・・ ・・・ <編集ファイル> これはXXXXです。  <-XXXXを変数でAAAAやBBBBに変えたい。追記したい。 これはAAAAです。 これはBBBBです。 これはCCCCです。 ・・・・・・・・ ・・・・・・・・ このような感じで追記で外部ファイルから1行ずつ読み出して、 任意の文字を置くことはできますでしょうか? よろしくお願いします。

専門家に質問してみよう