vb 数据的处理(系数转换、计算数据有效性、特征值、均方差、变幅)

ajunajun 2018-04-28 02:08:18
一、已有程序与计算效果说明
1.已有程序
上传到百度网盘的文件中包含了要处理的例子数据文件(a.txt)和脆皮大雪糕帮忙写的计算最大值、最小值、特征值及其出现位置的程序。再次真诚的万分的感谢脆皮大雪糕大哥!!!
网盘地址:https://pan.baidu.com/s/1gxR16Ii-782RCdjR0E_Ttw
2.计算效果
(1)第三、四、五、六、七项每项用一个独立函数,函数参数应随列数和相应设置变化;
(2)尽量写清楚注释;
(3)处理速度尽量快一些。
二、数据文件说明
1.不同文件的数据列数不确定(提前已经知道,比如text5.text=4),但至少有一列,每一列代表一种数据,文件的长度(行数)不确定值(但各列的行数是相同的),每一个数据的字节数不确定。
2.如例“a.txt”文件的数据文件有4列,每行数据格式为:数据1+空格+数据2+空格+数据3+空格+数据4。
3.数据文件中每一个NULL代表一个空数据,不参与下述计算。
数据格式如下(详见网盘中a.txt):
-14423.7 1001.34 552.12 29.67
NULL NULL NULL NULL
-14424.1 1001.34 552.14 29.67
NULL 1001.36 NULL 29.67
-16429.6 1001.33 552.23 29.67
-14431.1 1001.35 552.20 29.67
-14428.6 1001.35 552.21 29.66
三、系数的计算
1.若某列或多列设置了系数,则相应列的所有数据均乘以该系数(NULL保持不变)。未设置系数的列不计算。计算完成后产出新文件,并替换原文件名,以便后续计算。
2.若任何列都未设置系数,则不处理。
四、计算数据有效率和无效数据出现的位置段及个数
1.数据是否有效的说明。
(1)如果同时设置了最大值和最小值,某个数据≤最大值且≥最小值为有效数据;
(2)如果只设置了最大值,则≤最大值为有效数据;
(3)如果只设置了最小值,则≥最小值为有效数据;
(4)如果最大值和最小值均未设置,则全部数据均为有效数据。
数据有效率=有效数据个数÷数据总个数×100%(保留2位小数),其中NULL为有效数据但不参与计算。
2.若某列至少设置了最大值或最小值其中的一项,且存在无效数据(即>最大值或小于最小值),则找出第一个和最后一个无效数据和其位置(即所在的行数,下文同理)。
比如:程序中设置了第1列的最大值为1500、最小值为1400(因系数设置了0.1,所以该列所有数据均×0.1),第2列的最小值1000,第3列未设置,第4列最大值设置了40。
函数参数:文件有几列则函数的参数为列数的3倍(其中传递参数为列数的2倍,返回参数=列数)。比如a.txt文件中有4列,则传递给函数8个参数(A1Max,A1Min,A2Max,A2Min,A3Max,A3Min,A4Max,A4Min),未设置参数可用“999999”或特定字符代替(不需要计算)。返回计算结果的参数为列的个数(比如a.txt返回4个结果)。
这里传递给函数的参数分别为:1500,1400,999999,1000,999999,99999,40,999999。
输出格式:有几列数据输出几组结果,各组数据用逗号分开,每组结果用减号分开。
如a.txt返回的4个结果参数应为:“99.50-5-5-1,100.00-NO-NO-NO,100.00-NO-NO-NO,99.26-13-15-2”。
其中:100.00、99.50、100.00、99.26表示对应列数据的有效率;NO、5、NO、13表示是否出现无效数据或第一个无效数据所在的位置(行数);NO、5、NO、15表示最后一个无效数据所在的位置(行数),“未出现”用NO;NO、1、NO、2表示出现无效数据的个数。
3.若所有列最大值和最小值均未设置,不需要计算。
五、查找特征值及其出现的位置
1.如果某列设置了特征值,查找该特征值及第一次出现的位置。
比如:数据的第1列设置了特征值为0,但该特征值未出现。第3列设置了特征值为3333,第1次在第14行出现”。 第2和第4列未设置特征值,则无需计算,返回999999即可。
2.若至少有一列输入了特征值,则输入参数为数据文件的列数(本例中为4),未设置的用999999代替。
函数参数:文件有几列则函数的参数为列数的2倍(其中传递参数=列数,返回参数=列数)。如a.txt有4列,函数参数为:(char1,char2,char3,char4,ByrefCh1,ByrefCh2,ByrefCh3,ByrefCh4),其中char*为传递参数,ByrefCh*为返回参数。
上例中,传递参数:0,999999,3333, 999999。返回参数:NO,999999,14,999999。
3.若所有列均未设置特征值,不需要计算。
六、计算均方差并给出超过设置倍数均方差的数值和位置
1.如果某列设置了均方差的倍数(比如第1列设置了2倍),查找第一个和最后一个>2倍均方差的数据及其出现的位置,并计算超过2倍均方差数据的个数。比如第1列在第5行出现>2倍均方差。第4列设置了3倍,出现在第13和15行。
函数参数:文件有几列则函数的参数为列数的2倍(其中传递参数=列数,返回参数=列数)。如a.txt有4列,函数参数为:(Set1,Set 2,Set 3,Set 4,SquErr1,SquErr2,SquErr3,SquErr4),其中Set*为传递参数,SquErr*为返回参数。如已设置倍数,但未出现用“NO”表示。未设置返回999999。
如本例中,传递参数: 2,999999,999999,3。返回参数:5-5-1,999999,999999,13-15-2。假如第一列未出现>2倍均方差的数据,返回参数:NO,999999,999999,13-15-2。
其中:“5-5-1”表示“第一个>2倍均方差的数据-最后一个>2倍均方差的数据->2倍均方差数据的个数”, “13-15-2”表示第一个>3倍的在第13行出现,最后一个在第15行出现,总共有2个>3倍均方差数据。
3.如未设置任何特征值,则不计算。
七、计算变幅大于“允许变幅值”及其出现的位置段
变幅指相邻两个数据之差的绝对值(后一个减前一个)。
如果至少有一列设置了“允许变幅值”,则计算变幅大于“允许变幅值”及其出现的位置段。如某列未设置,则不计算,返回“NO”即可。
比如:(1)第1列“允许变幅值”设置了100(因为前面已经过系数计算),第5行的数据减第3行的数据=200.55(其中第4行为NULL,不参与计算),第6行-第5行=199.85。这个两个变幅(200.55)均>设置值(100)。表明有一个大的变幅数据,即第5行的1642.96。(2)比如第4列设置了10,分别在第13行和第15行有数据的变化大于10,即abs(第13行-12行)=10.67,abs(第14行-13行)=10.66,abs(第15行-14行)=35.84,abs(第16行-15行)=35.85。有2个变化大的数据,即40.33和65.51。
函数参数:文件有几列则函数的参数为列数的2倍(其中传递参数=列数,返回参数=列数)。如a.txt有4列,函数参数为:(Set1,Set 2,Set 3,Set 4,Amp1,Amp2,Amp3,Amp4),其中Set*为传递参数,Amp*为返回参数。已设置但未出现返回“NO”,未设置返回999999。
如:传递参数:100,999999,999999,10。返回参数:5-5-1,999999,999999,13-15-2。
其中:“5-5-1”表示第一列变幅超过设置的“允许变幅值”在第5行,最后一个也在第5行,有1个数据>设置的“允许变幅值”。“13-15-2”表示第13行至第15行之间有2个数据>设置的“允许变幅值”。
...全文
1460 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
of123 2018-05-03
  • 打赏
  • 举报
回复
如果用数据库,你这些计算需求都可以用 SQL 函数及子句解决。
of123 2018-05-03
  • 打赏
  • 举报
回复
如果是逗号分隔的数据,可以直接作为 Jet Engine 的外部数据库来访问,省不少事。
赵4老师 2018-05-01
  • 打赏
  • 举报
回复
与其自己费劲写一年多,真还不如给钱让脆皮大雪糕帮解决。 “凡是钱能解决的问题都不是问题。”
脆皮大雪糕 2018-04-29
  • 打赏
  • 举报
回复
这里是爱好者无偿互相帮助的地方。你直接把一个完整需求扔出来,有点过了吧。 建议你找付费外包的。
ajunajun 2018-04-29
  • 打赏
  • 举报
回复
引用 6 楼 chewinggum 的回复:
翻了一下是半年前的帖子 https://bbs.csdn.net/topics/392274329 话说半年了没啥进展啊,叫你老板拿三人月的成本来,我给搞定这个
这段一直没写,在写其它的部分,写了一年多了,您这么晚了还没睡?
脆皮大雪糕 2018-04-29
  • 打赏
  • 举报
回复
翻了一下是半年前的帖子 https://bbs.csdn.net/topics/392274329 话说半年了没啥进展啊,叫你老板拿三人月的成本来,我给搞定这个
ajunajun 2018-04-28
  • 打赏
  • 举报
回复
引用 3 楼 Chen8013 的回复:
你这是什么工程的数据处理? 似乎每个处理环节,你都是在这儿来要代码、让别人给你解决的啊…………
在写的一个监视程序,主要是自己水平太差,数据处理方面的真的不会,好不容易自己写了一些数据处理的代码,由于思路不行,脆皮大雪糕大哥的代码处理需要2秒,而我的需要3分钟,以前的数据还不是非常大,现在遇到了大出好几倍的数据直接就运行不下去了,确实没办法了才向大侠们请教的,麻烦有时间帮帮忙吧!万分感谢!!!
舉杯邀明月 2018-04-28
  • 打赏
  • 举报
回复
你这是什么工程的数据处理? 似乎每个处理环节,你都是在这儿来要代码、让别人给你解决的啊…………
ajunajun 2018-04-28
  • 打赏
  • 举报
回复
数据有效率=有效数据个数÷数据总个数×100%(保留2位小数),其中NULL为有效数据但不参与计算。 这行我没说清楚,应该为 数据有效率=有效数据个数÷数据总个数×100%(保留2位小数),其中NULL为有效数据,参与有效率计算,但不参与五、六、七项的计算。
小噤 2018-04-28
  • 打赏
  • 举报
回复
这么多字.也没看完.也没看出你要干嘛.

7,762

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧