文本格式如下:(其中/实际并不存在,只是为使例子容易看一些) 空格/点号/制表符/X坐标/空格/空格/Y坐标/空格/空格/空格/Z坐标
A 制表符 1.1 2.2 3.3 问题:
共有19个这样的文本文件,其中点号A在这19个文本中至多出现4次(0 <出现次数 <=4),我现在要把相同点的XYZ坐标两两相减。例如点A在19个文件中共出现4次,分别位于文件1,文件3,文件7和文件11中,那我则要将文件1与文件3中点A的X坐标相减,文件1与文件7中的X相减,文件1与文件11中的X相减,文件3与文件7中的X相减.... ,运行完毕应该有6个差值。出现4次则应有6个差值,出现3次则应有3个差值,出现2次则应有1个差值,出现1次则差值为其本身。计算完毕之后要生成一个差值文件,其格式如下:
点号/空格/文件M/空格/文件N/空格/差值现在想请教大家高效一些的算法,能有代码则更好。
A 制表符 1.1 2.2 3.3 问题:
共有19个这样的文本文件,其中点号A在这19个文本中至多出现4次(0 <出现次数 <=4),我现在要把相同点的XYZ坐标两两相减。例如点A在19个文件中共出现4次,分别位于文件1,文件3,文件7和文件11中,那我则要将文件1与文件3中点A的X坐标相减,文件1与文件7中的X相减,文件1与文件11中的X相减,文件3与文件7中的X相减.... ,运行完毕应该有6个差值。出现4次则应有6个差值,出现3次则应有3个差值,出现2次则应有1个差值,出现1次则差值为其本身。计算完毕之后要生成一个差值文件,其格式如下:
点号/空格/文件M/空格/文件N/空格/差值现在想请教大家高效一些的算法,能有代码则更好。
Dim fileID(3) As String, x(3) As Single, y(3) As Single, z(3) As Single
Dim n as Integer, i As Integer, j As IntegerSet cn = New ADODB.Connection
cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=你的数据库名.mdb"
Set rsPoints = cn.Execute("Select Distinct pointID From 你的数据库表名")
Open "d:\data\point_x_deff.txt" For Output As #1
Open "d:\data\point_y_deff.txt" For Output As #2
Open "d:\data\point_z_deff.txt" For Output As #3
Do Until rsPoints.EOF
Set rsData = cn.Execute("Select * From 你的数据库表名 Where pointID='" & rsPoints!pointID & "'")
n = 0
Do Until rsData.EOF
fileID(n) = rsData!fileID
x(n) = Val(rsData!x)
y(n) = Val(rsData!y)
z(n) = Val(rsData!z)
rsData.MoveNext
Loop
rsData.Close If n = 1 Then
Print #1, rsPoints!pointID & " " & fileID(0) & " " & fileID(0) & " " & rsData!x
Print #2, rsPoints!pointID & " " & fileID(0) & " " & fileID(0) & " " & rsData!y
Print #3, rsPoints!pointID & " " & fileID(0) & " " & fileID(0) & " " & rsData!z
Else
For i = 0 to n - 1
For j = i + 1 to n
Print #1, rsPoints!pointID & " " & fileID(i) & " " & fileID(j) & " " & Format(x(i) - x(j), "STANDARD")
Print #2, rsPoints!pointID & " " & fileID(i) & " " & fileID(j) & " " & Format(y(i) - y(j), "STANDARD")
Print #3, rsPoints!pointID & " " & fileID(i) & " " & fileID(j) & " " & Format(z(i) - z(j), "STANDARD")
Next j
Next i
End If
rsPoints.MoveNext
Loop
Close #1
Close #2
Close #3
rsPoints.Close
Set rsPoints = Nothing
cn.Close
Set cn = Nothing