ReDim Preserveについて。

解決


前田のクラッカー  2003-02-13 17:33:47  No: 106025

サンプル.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


とおりすがり  2003-02-13 18:04:37  No: 106026

Redim Private は ヘルプを見ていただいても判ると思いますが、内容を記述すると、既存の配列に格納されている値を失うことなく、配列の最後の次元の要素数を変更する場合に使用する、キーワードです。
つまり、「strArray」の中身を初期化しないといけないと云う事です。
Do Untilの前に「Erase strArray」を使用して初期化しましょう。


前田のクラッカー  2003-02-13 18:46:05  No: 106027

早速の回答ありがとうございます。
現状では「Erase strArray」を使用していないのですが
初期化される場合と初期化されない場合があります。
これは何故なのでしょうか?


nanashi  2003-02-13 18:57:00  No: 106028

Redim Preserveでは初期化はされません。
試しにRedim Preserveの直後にブレイクポイントを設定して中身を見てください。


たかみちえ  URL  2003-02-13 19:35:31  No: 106029

VBでは変数は、宣言と同時に初期化される…様な話を聞いたことあります。
  だから、最初は初期化されるので、そう見えただけでは?

  ところで、Preserveがなければ、配列内容はクリアされたと思いますけど?


前田のクラッカー  2003-02-14 04:17:02  No: 106030

デバッグで「Do Until」の前に「Erase strArray」を追加して行ったのですが、
1回目は「TEXT1」にテキストファイルの内容を表示するのですが、
2回目以降は「TEXT1」が空欄、何も表示しないのです。
デバッグ停止して再度行うと、1回目だけは表示するのですが、
2回目以降は何も表示しないのです。

「ReDim Preserve strArray(intIndex)」を
「ReDim strArray(intIndex)」とすると、最初から何も表示しないのです。

とんちんかんなデバッグをしているかもしれませんが、
何方か教えてください。


Y2  2003-02-14 08:42:28  No: 106031

intIndex = 0に初期化されていないみたいですけど、
予想ですが、その状態でEraseだけ行っていませんか?
Do Untilの前に初期化を追加し、RedimにPreserveを付けておけば2回目以降も正常に動作すると思われます。

あと、気がついたことですが、せっかくFreeFileで使用可能なファイル番号を獲得しているのに、ファイル番号1で固定になっていますね。


前田のクラッカー  2003-02-15 17:21:41  No: 106032

やっと気がつきました。
intIndexが初期化されずに、ず〜っとカウントアップされてました。
解決しました。
みなさんありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加