初めまして。
現在、初めてのプログラム作成を行っていますが
問題が発生しましたので投稿いたします。
問題の場所の説明ですが
.logファイル(カンマ区切り)を読み取り
各要素毎に配列Aに格納していく(31個の要素)
その後、Select Caseで配列Aを3つのグループに振り分けて表示する。
配列は全て標準モジュールで定義しているユーザー定義型になります。
ここまでは良いのですが
配列AをSelect Caseで区別した後に
配列B,配列C,配列Dに格納する時に問題が発生しています。
図にすると
配列B(0).X=""
配列B(1).X=1000
配列B(2).X=""
配列B(3).X=""
配列B(4).X=2910
と歯抜けになって格納されます。
当り前ですが表示するときも歯抜けで表示されます。
現在のやり方として以下の方法で選別、格納を行っています。
For i = 0 To 1000
'.logファイルのデータを読み込み配列に格納
Input #1, z(i).kari1,z(i).kari2,z(i).kari3,z(i).kari4,z(i).kari5, _
z(i).kari6, z(i).kari7, z(i).kari8, z(i).kari9, z(i).kari10, _
z(i).kari11, z(i).kari12, z(i).kari13, z(i).kari14, z(i).kari15, _
z(i).kari16, z(i).kari17, z(i).kari18, z(i).kari19, z(i).kari20, _
z(i).kari21, z(i).kari22, z(i).kari23, z(i).kari24, z(i).kari25, _
z(i).kari26, z(i).kari27, z(i).kari28, z(i).kari29, z(i).kari30, _
z(i).kari31
On Error Resume Next
'選別
Select Case z(i).kari3
Case "2A"
a(i).LNo = z(i).kari1
a(i).Tis = z(i).kari2
a(i).Fre = z(i).kari3
a(i).Heu = z(i).kari5
a(i).Hed = z(i).kari6
Case "1B"
b(i).LNo = z(i).kari1
b(i).Tis = z(i).kari2
b(i).Fre = z(i).kari3
b(i).Heu = z(i).kari5
b(i).Hed = z(i).kari6
Case "4C"
c(i).LNo = z(i).kari1
c(i).Tis = z(i).kari2
c(i).Fre = z(i).kari3
c(i).Heu = z(i).kari5
c(i).Hed = z(i).kari6
End Select
Next i
良い解決方法をご教授願います。
ソースをほぼそのままで活用して手を入れるなら
"2A"用のカウンタ、"1B"用のカウンタ、"4C"用のカウンタを用意し
iを使わず、それぞれのカウンタを使えばやりたいことが出来ると思いますよ。
X=0
Y=0
Z=0
と初期化しておき
Case "2A" にきたら
X=X+1
a(X).LNo = z(i).kari1
a(X).Tis = z(i).kari2
↑
ここで使う
Case "1B" にきたら
Y=Y+1
a(Y).LNo = z(i).kari1
a(Y).Tis = z(i).kari2
としたらいいんじゃないですか。
以下を解析してくれても同じようなことができます。(ソースにコピペでどうぞ)
Option Explicit
Private Type tWork
LNo As String
Tis As String
Fre As String
End Type
Private Sub Command1_Click()
Dim xInWrk() As String
Dim iFno As Integer
Dim sIndata As String
Dim ADATA() As tWork
Dim BDATA() As tWork
ReDim ADATA(0) As tWork
ReDim BDATA(0) As tWork
iFno = FreeFile
Open "C:\TEXT.TXT" For Input As #iFno
Do While Not EOF(iFno)
Line Input #iFno, sIndata
xInWrk() = Split(sIndata, ",")
If UBound(xInWrk()) >= 0 Then 'データあり
Select Case xInWrk(0)
Case "A"
ReDim Preserve ADATA(UBound(ADATA()) + 1) As tWork
ADATA(UBound(ADATA())).LNo = xInWrk(1)
ADATA(UBound(ADATA())).Tis = xInWrk(2)
ADATA(UBound(ADATA())).Fre = xInWrk(4)
Case "B"
ReDim Preserve BDATA(UBound(BDATA()) + 1) As tWork
BDATA(UBound(BDATA())).LNo = xInWrk(1)
BDATA(UBound(BDATA())).Tis = xInWrk(2)
BDATA(UBound(BDATA())).Fre = xInWrk(4)
End Select
End If
Loop
Close #iFno
End Sub
あんび様
ありがとうございます!無事解決致しました。
きちんと表示された時には感動しました。
ツイート | ![]() |