![]() |
#2
风吹过b2019-11-20 08:30
|
1、在您的程序中,将MaxX和MaxY定义成常数,如果我想这两个值定义成变量,取窗体中TEXT1和TEXT2两个文本框的值(这两个值就是本文最后的label24.Caption和label25.Caption的值),这个怎么改写?我把下面这段语句
'
Public Const MaxX = 71 '72个格子
Public Const MaxY = 79 '80个格子
Public Const MaxX = 71 '72个格子
Public Const MaxY = 79 '80个格子
改写成

dim MaxX as long
dim MAXY as long
MaxX = text1.text - 1
MaxY = text2.text - 1
Public D(MaxX, MaxY) As 数据结构
改写成
DIM D(MaxX, MaxY) As String
运行证明这两个地方都会出错,不知道该怎样修改。
2、您的程序是通过对我提供的一个文本进行读取而生成图片的,这个文本我是对一个数据文件通过如下语句进行解析生成的:
我的程序:

Dim c3 As Byte, i3 As Integer, q3 As Long, abc1 As Integer, abc2 As Integer, abc3 As String, abc4 As Integer, abc5 As Integer
Dim A3
If Label81.Caption < 0 Then
abc1 = Label81.Caption - 1
Else
abc1 = Label81.Caption - 1
End If
abc2 = Label82.Caption
Open Dir1.Path & "\" & File1.FileName For Binary As #1
Open Dir1.Path & "\" & File1.FileName & "-坐标.txt" For Append As #2
For q3 = 0 To (Label24.Caption * Label25.Caption) - 1
Seek #1, ((q3 * 6) + 237)
For i3 = 1 To 6
Get #1, , c3
d3 = ""
d3 = d3 & Right("0" & Hex(c3), 2)
Text31.Text = Text31.Text & d3 & ""
Next i3
If abc1 < 0 Then
abc1 = abc1 + 1
Else
abc1 = abc1 + 1
End If
If abc1 = (Val(Label81.Caption) + Val(Label25.Caption)) Then
abc2 = abc2 + 1
abc1 = Label81.Caption
End If
abc5 = Mid(Text31.Text, 5, 1)
abc3 = Mid(Text31.Text, 11, 2)
If abc3 <> "00" Then
abc4 = Val(Mid(Text31.Text, 9, 2)) + 1
Else
abc4 = Val(Mid(Text31.Text, 9, 2))
End If
Print #2, abc1 & "," & abc2 & "," & abc5 & "," & abc4 & "," & Val("&H" & abc3) 'abc3
Text31.Text = ""
Next q3
Close #1
Close #2
再加上您的程序(由于上面程序生成的文本格式与我之前提供的文本格式不太一样,我对您的程序略微修改了一下):

ii = 0
jj = 0
Open Path & FileName For Input As #fr
Do While Not EOF(fr)
Line Input #fr, s
fj = Split(s, ",")
If UBound(fj) > 1 Then
'文件的值为 0 1 或大于1。而数组没有给值时为0,这里冲突。读取坐标值的数据 +1 ,让没有标明的为0,标明为0的为1,1的为2,类推
D(ii, jj).D = s
If fj(4) = "00" And fj(2) = "8" Then
D(ii, jj).C = 3
Else
D(ii, jj).C = fj(4) + 1
End If
ii = ii + 1
If ii > MaxX Then
ii = 0
jj = jj + 1
If jj > MaxY Then Exit Do
End If
End If
Loop
Close #fr
jj = 0
Open Path & FileName For Input As #fr
Do While Not EOF(fr)
Line Input #fr, s
fj = Split(s, ",")
If UBound(fj) > 1 Then
'文件的值为 0 1 或大于1。而数组没有给值时为0,这里冲突。读取坐标值的数据 +1 ,让没有标明的为0,标明为0的为1,1的为2,类推
D(ii, jj).D = s
If fj(4) = "00" And fj(2) = "8" Then
D(ii, jj).C = 3
Else
D(ii, jj).C = fj(4) + 1
End If
ii = ii + 1
If ii > MaxX Then
ii = 0
jj = jj + 1
If jj > MaxY Then Exit Do
End If
End If
Loop
Close #fr
我现在想把生成实体TXT文件作为中间步骤的方式修改成在内存里对原始数据文件进行解析后按照二维数组方式直接读入内存,您编写的那一段直接读内存数组,主要是为了加快速度。我大概计算了一下,我的程序解析生成文本文件大概需要十几秒的时间,再加上读取并生成图片,大概需要15~20秒的时间。
我的程序中几个Label的值如下:
label24.Caption = "166"
label25.Caption = "244"
Label81.Caption = "42"
Label81.Caption = "6"
Text31.Text = ""
3、我提供的TXT文件每行字符串前两个数字分别代表某一个方块的X坐标和Y坐标, 风吹过b 版主您的程序支持X坐标和Y坐标可能为负值的情况吗?我知道有这种情况,但目前我还没有找到实例的原始数据文件来测试。
附件我提供如下三样:
1、原始数据文件;
只有本站会员才能查看附件,请 登录
2、原始数据文件解析后生成TXT文件;
只有本站会员才能查看附件,请 登录
3、略微修改了一下的 风吹过b 版主 的程序。
只有本站会员才能查看附件,请 登录