- ベストアンサー
Do - Loop文
VB6の質問です。 受取データが、桁数は不定で、たて続けにきます。 そして、毎回ごとのデータを記録します。 記録用の変数は回数分、作成する必要があると思いますが、対処方法がわかりません。 宜しくお願い致します。 Dim Record As String '記録 Dim Data As String Do ・ ・ Data = (受取りデータ1)、(受取りデータ2)..... Recoed = Data Loop until Data = ""
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
Dimで確保しておくエリアは、VBの場合物理的に確保 されるわけじゃなく、ダイナミックに拡張していきます。 逆に言えば「十分大きな値を確保しても、ギリギリの 大きさを確保しても、メモリ上に確保するエリアは殆ど 変わらず、実行速度も変わらない」んです。 ですので、これ以上はデータが来ないという件数以上 に配列を確保しておいて、 Dim DATA(1000) as String BUFF = "" i = 0 Do BUFF = 'ここにデータを送り込む処理を書く i = i + 1 DATA(i) = BUFF LOOP While BUFF <> "" こんな発想でプログラミングすればいいんじゃないかと。
その他の回答 (2)
- Siegrune
- ベストアンサー率35% (316/895)
VB6にも、redim preserveやsplitはあったはずなので Dim Record As String'記録 Dim Data As String dim Record() as string dim wk() as string dim RecordStart as single,ix1 as single redim Record(0) Do ・ ・ Data = (受取りデータ1)、(受取りデータ2)..... wk = split(Data,"、") '"、"は各受取りデータの区切り文字 'wk()に区切り文字で分割した数だけ格納されます。 RecordStart = ubound(Record) + 1 'Record(1)からRecord(ubound(Record))まではデータが格納済。最初は、ubound(Record)=0 redim preserve record(ubound(record)+ubound(wk)+1) 'Record()をwk()の要素数だけ拡張します。 for ix1 = RecordStart to ubound(record) '上記で計算した今回格納する最初の場所から最後の場所まで処理します。 Record(ix1) = wk(ix1-RecordStart) next Loop until Data = ""
補足
ありがとうございました。 1. 受取りデータ2からデータを取得する件、単純に以下のコードはいかかでしょうか? Dim Record As String'記録 Dim Data(1000) As String Dim I As Integer = 0 For I = 1 to 1000 '2回目からの処理 ・ ・ Recoed = (受取りデータ1)、(受取りデータ2)..... Data(i) = Record Nest until Data = "" 2. 申し訳ございません。別の質問をさせてください。 例えば、以下のような関数で、一度だけ実行したら、2回目以降は使用できなくする方法はございますか? 使用は1回だけにしたいです。 public function test() as String Do ・ ・ Loop end function
- osietete4
- ベストアンサー率21% (81/369)
質問の意味がよくわからないのですが、「データを記録」とはファイルに出力という意味でしょうか? もしそうなら、「Data = (受取りデータ1)、(受取りデータ2).....」の部分で受け取ったデータをファイルに書き込めばいいだけでは? っていうか、「Data = (受取りデータ1)、(受取りデータ2).....」の部分って「受け取りデータ」の桁数が長いときびしくない? 処理速度遅いどころか、落ちるのでは?
お礼
ありがとうございました。 前回の質問は無視してください。
補足
ありがとうございます。 Dim DATA(1000) as String BUFF = "" i = 0 Do BUFF = ' (受取りデータ1)、(受取りデータ2).....が連続で受信される i = i + 1 DATA(i) = BUFF LOOP While BUFF <> "" 1. ↑の例で、受取りデータ1を無視して、受取りデータ2からデータを取るにはどうような方法がございますか?