以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- [求助]请老师帮我写个根据要求抽取数据的代码 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=62939) |
||||
-- 作者:huangfanzi -- 发布时间:2015/1/10 14:40:00 -- [求助]请老师帮我写个根据要求抽取数据的代码 假定表中有如下内容: 卷号 重量 行号 母卷号 CS100001 100 1 CS100001 CS100001A 50 2 CS100001 CS100001A 45 3 CS100001 CS100001B 50 4 CS100001 CS100001B 40 5 CS100001 CS100001BA 20 6 CS100001 CS100001BB 20 7 CS100001 CS100002 200 8 CS100002 CS100002 195 9 CS100002 表内卷号的意义: 一个卷初始编号即母卷号为8位数,如CS100001,在加工过程发生了断带,就会变成二个卷(或多个卷),这时,断后的二个卷在原未断前的卷号后面跟上英文字母,断后的卷继续加工,只要不再断卷,卷号保持不变,卷的重量随着加工的进程,会有一定的损耗,就如行号2的分卷重量50 继续加工后得到行号3的重量45 想通过一段代码抽取断后分卷的期初重量合计,思路如下: 当下一行的卷号位数比上一行多一位时,并且母卷号相等,即行号2比行号1的位数多了一位,二行的母卷号一致,可判断发生了断带分卷。 当发生断带分卷时,要求统计出断后的二个卷期初的重量,即行号2与行号4的重量,将此重量合计赋值给变量 FJZ 谢谢老师!
|
||||
-- 作者:Bin -- 发布时间:2015/1/10 14:53:00 -- 没搞懂逻辑, 统计2和4? 那按道理 2 4 6 7 都符合统计要求啊.为什么就不管6 7了呢? |
||||
-- 作者:huangfanzi -- 发布时间:2015/1/10 15:04:00 -- 6与7二行是由第5行断带后生成的,对于第1行的断带后分卷期初重量只有2与4二行,我要做这些实际是想算投料量,然后算出每道工序的成材率,我把表写的完整些。 卷号 重量 行号 母卷号 投料量 投料量计算方法 CS100001 100 1 CS100001 100 CS100001A 50 2 CS100001 50 100*50/(50+50) 解释:分卷前重量*本行卷重/分卷总重即2与4二行 CS100001A 45 3 CS100001 50 CS100001B 50 4 CS100001 50 CS100001B 40 5 CS100001 50 CS100001BA 20 6 CS100001 25 CS100001BB 20 7 CS100001 25 50*25/(25+25) CS100002 200 8 CS100002 200 CS100002 195 9 CS100002 200 由此可见,上表中第7行的成材率是80%,即20/25*100%
[此贴子已经被作者于2015-1-10 15:06:26编辑过]
|
||||
-- 作者:huangfanzi -- 发布时间:2015/1/10 18:49:00 -- 老师有空吗,帮我看看如何写代码,谢谢! |
||||
-- 作者:lsy -- 发布时间:2015/1/10 19:01:00 -- 楼主提问的方法,就有问题。 别人要写代码,就要引用表,你不提供实例,表也没一张,别人就要从头开始做个小项目、建表、填写足够的数据,然后才能开始写代码, 还要测试代码,如果楼主有疑问,还要往返几个来回,来来去去,时间都耽误了。
|
||||
-- 作者:huangfanzi -- 发布时间:2015/1/10 20:21:00 -- 做了个例子,麻烦老师了。
|
||||
-- 作者:有点甜 -- 发布时间:2015/1/11 11:43:00 -- Dim drs As List(Of DataRow) = DataTables("轧机1号").Select("", "日期,卷号") drs(0)("投料量")=drs(0)("重量") For i As Integer = 1 To drs.Count - 1 If drs(i)("卷号") <> drs(i-1)("卷号") AndAlso drs(i)("卷号").Contains(drs(i-1)("卷号")) Then drs(i)("投料量") = drs(i)("重量") / (drs(i)("重量")+drs(i+1)("重量")) * drs(i-1)("重量") drs(i+1)("投料量") = drs(i+1)("重量") / (drs(i)("重量")+drs(i+1)("重量")) * drs(i-1)("重量") i += 1 Else drs(i)("投料量") = drs(i)("重量") End If Next |
||||
-- 作者:huangfanzi -- 发布时间:2015/1/11 12:22:00 -- 甜老师,计算结果有错误,麻烦您再帮我看看。
|
||||
-- 作者:有点甜 -- 发布时间:2015/1/11 12:43:00 -- Dim drs As List(Of DataRow) = DataTables("轧机1号").Select("", "日期,卷号") drs(0)("投料量")=drs(0)("重量") Dim tll As Double = drs(0)("重量") For i As Integer = 1 To drs.Count - 1 If drs(i)("卷号") = drs(i-1)("卷号") drs(i)("投料量") = tll Else If drs(i)("卷号").Contains(drs(i-1)("卷号")) Then drs(i)("投料量") = drs(i)("重量") / (drs(i)("重量")+drs(i+1)("重量")) * drs(i-1)("投料量") drs(i+1)("投料量") = drs(i+1)("重量") / (drs(i)("重量")+drs(i+1)("重量")) * drs(i-1)("投料量") i += 1 tll = drs(i)("投料量") Else tll = drs(i)("重量") drs(i)("投料量") = tll End If Next |
||||
-- 作者:huangfanzi -- 发布时间:2015/1/11 12:44:00 -- 甜老师,万分抱歉,我之前给的样例不是很好,我看了你的代码,是假定每次分卷只会出二个来写的,实际上,分几个不一定的,可能是3个甚至5个,我把样例改了下,注意看第10行,您老再帮我看看,万分感谢!
[此贴子已经被作者于2015-1-11 12:47:41编辑过]
|