以文本方式查看主题

-  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
--  

做了个例子,麻烦老师了。

 

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:投料量分摊.rar


--  作者:有点甜
--  发布时间: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
--  

甜老师,计算结果有错误,麻烦您再帮我看看。

 


图片点击可在新窗口打开查看此主题相关图片如下:投料量计算结果图.jpg
图片点击可在新窗口打开查看


--  作者:有点甜
--  发布时间: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行,您老再帮我看看,万分感谢!

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:投料量分摊new.rar

[此贴子已经被作者于2015-1-11 12:47:41编辑过]