以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  一个比较奇葩的需求,但是却非常需要,哪位老师给看看,这个问题怎么解决  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=145192)

--  作者:1669607010
--  发布时间:2020/1/11 14:40:00
--  一个比较奇葩的需求,但是却非常需要,哪位老师给看看,这个问题怎么解决
一个比较奇葩的需求,但是却非常需要,哪位老师给看看,这个问题怎么解决
纺织行业布料进行花纹设计的时候要对纱线进行排序(比如A为红色纱线,B为蓝色纱线),简单的排序比如(60A8B12A)*38+48A表示纱线排序为60根A纱线8根B纱线12根A纱线为一个循环,循环38次,然后再加上48根A纱线,共3088根纱线。复杂点的排序还有这样的[(1A1B)*36+1A4B+(1A1B)*5+2A4B4A4B3A6B3A4B4A4B2A1B+(1A1B)*4+1A3B+(1A1B)*9]*18+(1A1B)*26,实际情况还有更复杂的,比如纱线有A、B、C、D、E、F、G、H、I、J、K、L、M、N、等十几个颜色,大循环套小循环,括号要用四五重,纱线总数少的品种2000+根,多的有6000+根,现在想实现的是如何计算出这一组纱线排序中每种纱线的根数?

--  作者:有点蓝
--  发布时间:2020/1/11 15:06:00
--  
这个有点麻烦,给多几个例子看看,简单、复杂,最复杂各给5个例子看看
--  作者:1669607010
--  发布时间:2020/1/11 15:47:00
--  

最简单的:

1A*2450  *****这个其实也就等于2450A

(1A1B)*1200

1A1B*1200-1B    *****这个其实也就等于(1A1B*1199+1A

60A8B12A*38+48A

(1A1B)*1200+(1A1C)*1200

 

复杂点的:

[1A1B*36+1A4B+1A1B*5+2A4B4A4B3A6B3A4B4A4B2A1B+1A1B*4+1A3B+1A1B*9]*18+1A1B*26

 

[1A1C*36+1A4D+1A1E*5+2A4B4A4F3A6B3A4B4A4B2A1B+11A10B*4+1A3B+1A1B*9]*11+[3A1C*36+5A4D+1G1E*5+2A4B2A1B+11A10B*4+1A3B+1A1B*9]*12


[3A1C*36+5A4D+1G1E*5+2A4B2A1B+11A10B*4+1A3B+1A1B*9]*12+2A4B4A4B3A6B3A+11A10B*4+1A3B+1A1B*9]*12


{[1A1C*36+1A4D+1A1E*5+2A4B4A4F3A6B3A4B4A4B2A1B+11A10B*4+1A3B+1A1B*9]*7+(11A10B*4+1A3B+1A1B*9}*3+3B3C

 

{[1A1C*36+1A4D+11A10B*4+1A3B+1A1B*9]*7+(11A10B*4+1A3B+1A1B*9}*3+[3B3C+11A10B*4]

 

 

 

最复杂的就是上面两个复杂的结合到一起外面再套一层括号再循环一次,不过最复杂的那种很少见,可以不考虑,能解决3重括号就能满足绝大部分需要,

总体上来说,就是1-20种不等的纱线按顺序排2000-6000根,把其中有规律的部分写成循环了,需求是获得这一组纱线中各种纱线的根数,进而求出每种纱线在这一组中所占的比例,

 

[此贴子已经被作者于2020/1/13 8:30:11编辑过]

--  作者:1669607010
--  发布时间:2020/1/13 8:02:00
--  
手工置顶,大佬们帮忙看一下,有什么办法解决吗?
--  作者:lur320
--  发布时间:2020/1/13 8:52:00
--  
实际上并不难,
难的是如何输入这些数据。以如何的形式输入方便生产实际情况才是难。有几个方案你看看:

1,先做一个组表,即(xxxx)这里的单一形式作为组,在这个租表内进行输入和计算。组内的计算方法是加减乘除,最后给一个组表内的用量进行计算,每个组都有一个命名,
2,做一个组表的库,每个组都有其用量和命名号。

这样的话,再多的()或者{}都可以计算,例如在组表内可以选择A线,也可以选择已经计算好的其他的组表的名字。就相当于递归第二次套用。

一个例子:
组表内新设定有1A+1B+1@sss@*2,名字叫ccc,其中SSS是是组表库里面选中的。

而组表库有2组数据,一个是之前设定的sss,一个是刚刚设定好的ccc
其中SSS的数据是1c*2+1D

--  作者:1669607010
--  发布时间:2020/1/13 10:18:00
--  
数据录入方式,最好是直接将{[1A1C*36+1A4D+1A1E*5+2A4B4A4F3A6B3A4B4A4B2A1B+11A10B*4+1A3B+1A1B*9]*7+(11A10B*4+1A3B+1A1B*9}*3+3B3C这些作为一个字符串录入一个单元格,然后对这一组字符串进行操作。这样不仅方便设计师观看,也方便录入,我们公司30年了,都是手工处理这些。费时费力还容易出错。我的想法是有没有办法,对这个字符串进行处理,得出每种纱线的根数。我们的纱线排序格式是很严格的,就是字母表示纱线的种类,然后前面的数字表示这种纱线在排序中连续出现的次数,遇到相同的循环的就用括号括起来后面注上乘几表示循环几次。









--  作者:lur320
--  发布时间:2020/1/13 10:37:00
--  
字符串录入,要实现判断各种出错的情况,全角半角、特殊符号和空格都会导致结果错误。
很难


--  作者:1669607010
--  发布时间:2020/1/13 11:07:00
--  
字符串输入全角、半角和特殊字符的问题可以这样解决吗?运算符号只包括+号和*号,括号包括大中小括号,字母全是大写英文字母,字符串输入可以设计个表达式修改器那样的界面,不用键盘输入,直接直接用鼠标点击输入,因为所用的字符比较固定,应该可以吧
--  作者:逛逛
--  发布时间:2020/1/13 12:13:00
--  
凑呗

Dim s As String = "[(1A1C)*36+1A4D+(1A1E)*5+2A4B4A4F3A6B3A4B4A4B2A1B+(11A10B)*4+1A3B+(1A1B)*9]*11+[(3A1C)*36+5A4D+(1G1E)*5+2A4B2A1B+(11A10B)*4+1A3B+(1A1B)*9]*12"
Dim SS() As String = {"A" ,"B","C","D","E"  ,"F","G","H","Z" }
Dim sq As String
For i As Integer = 0 To ss.Length - 1
     sq = Regex.Replace(s, SS(I) , "@")
     sq = Regex.Replace(sQ, "[1-9]\\d{0,2}[a-zA-Z]" , "")
    sq = sQ.Replace("()","0")
     sq = sQ.Replace("@","+")   
    sq = Regex.Replace(sQ, "[\\[\\{\\(]", "(")
    sq = Regex.Replace(sQ, "[\\]\\}\\)]", ")")
    sq = sQ.Replace("++","+")
    sq = sQ.Replace("+)",")")
    Output.Show(ss(i) & "=" & Eval(sq))  
Next
[此贴子已经被作者于2020/1/13 13:16:13编辑过]

--  作者:1669607010
--  发布时间:2020/1/14 13:41:00
--  
谢谢逛逛老师提供的思路,我试试