您的位置:程序门 -> vb -> 基础类



不同文件间具有相同id的几个数两两相减如何解决?


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


不同文件间具有相同id的几个数两两相减如何解决?[已结贴,结贴人:gis119]
发表于:2007-10-12 09:16:03 楼主
文本格式如下:(其中/实际并不存在,只是为使例子容易看一些)  

空格/点号/制表符/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/空格/差值

现在想请教大家高效一些的算法,能有代码则更好。
发表于:2007-10-12 09:19:071楼 得分:0
文件m与文件n是为了说明这个差值是那两个文件中具有相同点号的点的差值。对于y和z坐标的计算,也是如此。
发表于:2007-10-13 08:27:302楼 得分:0
有人知道吗,麻烦告诉一声
发表于:2007-10-13 13:31:543楼 得分:0
我记得你曾经问过类似的平均值问题。

既然如此,何不将这些数据读入数据库,以后做什么统计都很方便。
发表于:2007-10-13 14:26:404楼 得分:0
这是一个办法,我会考虑,可现在所有数据都只是基于文本,所以先把这个解决了先吧。
发表于:2007-10-13 15:11:335楼 得分:20
从文件中读取数据我已经教过你了。假定你已经知道如何将数据存入   access   数据库了:

dim   cn   as   adodb.connection,   rspoints   as   adodb.recordset,   rsdata   as   adodb.recordset
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   integer

set   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              


快速检索

最新资讯
热门点击