サンプル.txtの中身を読み込んで、
そのテキストファイルの1行目だけをtext1に表示したいのですが、
たまに、サンプル.txtの中身が変更られているにもかかわらず、
text1には変更された内容ではなく、
前の読み込んだデータが表示されるのです。
原因が分からないので、何方か教えてください。
下記がプログラムです。
Private Sub sample()
intFileNo = FreeFile
Open "C:\WINDOWS\デスクトップ\サンプル.txt" For Input As #1
Do Until EOF(1)
ReDim Preserve strArray(intIndex)
Line Input #1, strArray(intIndex)
intIndex = intIndex + 1
Loop
Close #1
Text1 = strArray(Int(0))
End Sub
Redim Private は ヘルプを見ていただいても判ると思いますが、内容を記述すると、既存の配列に格納されている値を失うことなく、配列の最後の次元の要素数を変更する場合に使用する、キーワードです。
つまり、「strArray」の中身を初期化しないといけないと云う事です。
Do Untilの前に「Erase strArray」を使用して初期化しましょう。
早速の回答ありがとうございます。
現状では「Erase strArray」を使用していないのですが
初期化される場合と初期化されない場合があります。
これは何故なのでしょうか?
Redim Preserveでは初期化はされません。
試しにRedim Preserveの直後にブレイクポイントを設定して中身を見てください。
VBでは変数は、宣言と同時に初期化される…様な話を聞いたことあります。
だから、最初は初期化されるので、そう見えただけでは?
ところで、Preserveがなければ、配列内容はクリアされたと思いますけど?
デバッグで「Do Until」の前に「Erase strArray」を追加して行ったのですが、
1回目は「TEXT1」にテキストファイルの内容を表示するのですが、
2回目以降は「TEXT1」が空欄、何も表示しないのです。
デバッグ停止して再度行うと、1回目だけは表示するのですが、
2回目以降は何も表示しないのです。
「ReDim Preserve strArray(intIndex)」を
「ReDim strArray(intIndex)」とすると、最初から何も表示しないのです。
とんちんかんなデバッグをしているかもしれませんが、
何方か教えてください。
intIndex = 0に初期化されていないみたいですけど、
予想ですが、その状態でEraseだけ行っていませんか?
Do Untilの前に初期化を追加し、RedimにPreserveを付けておけば2回目以降も正常に動作すると思われます。
あと、気がついたことですが、せっかくFreeFileで使用可能なファイル番号を獲得しているのに、ファイル番号1で固定になっていますね。
やっと気がつきました。
intIndexが初期化されずに、ず〜っとカウントアップされてました。
解決しました。
みなさんありがとうございました。