关于字符串替换的问题

yumanqing 2009-04-15 09:17:39
在项目中有个要计算的公式字符串,是这样的:
101 投入吨 15
102 成品吨 5.6
103 出片率=(102/101)*100

这只是举了一个简单的例子,实际比这复杂,现在的问题是:
我在程序中的103是根据101,102 计算出来的,我在将公式=(102/101)*100替换成(5.6/15)*100的时候采用的Replace,
可总是有些问题,不能应对各种复杂的环境,比如项目中没有的话就是0,
先求类似的做法有好的思路吗?共同探讨一下。谢谢!分不是问题,多的很
...全文
146 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
heruoyong 2009-04-15
  • 打赏
  • 举报
回复
公式替换和计算器的公式替换的道理是一样的,这个我认为要简单一些
(a+b*c-d)*(e*f)-g/h+i
keystudio 2009-04-15
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 yumanqing 的回复:]
现在关键是公式替换(还有项目假如不存在的话,就为0),替换好了,计算的方法已经写好了。
[/Quote]

建议你把替换放在计算的方法里 不知道你是怎么做的计算 我还是建议拿栈做 遇到引用项替换然后进栈计算
yumanqing 2009-04-15
  • 打赏
  • 举报
回复
现在关键是公式替换(还有项目假如不存在的话,就为0),替换好了,计算的方法已经写好了。
heruoyong 2009-04-15
  • 打赏
  • 举报
回复
哪有这么复杂啊,就是仅仅是模式分析而已
既然是用户输入的表达式,应该有个规则
keystudio 2009-04-15
  • 打赏
  • 举报
回复
做表达式你还是考虑拿栈做吧

然后定义表达式时给引用其他项的做个特殊标识 比如引用101项 [101]
yumanqing 2009-04-15
  • 打赏
  • 举报
回复
我总觉得类似的计算公式在程序中非常不好处理,不是一个很好的解决办法,有做过类似功能的给点建议,如何做
yumanqing 2009-04-15
  • 打赏
  • 举报
回复
现在关键是项目和公式都是客户定义的
我在程序中不可能这样写
//判断一下ID1\ID2的有效性
return (GetPercent(ID1)/GetPercent(ID2))*100;
norron 2009-04-15
  • 打赏
  • 举报
回复
学习一下!
zgke 2009-04-15
  • 打赏
  • 举报
回复

this.Text=GetFormulaValue("({0}/{1})*100", new string[] {"5.6","15"}).ToString();
//37.333333333333333333333333330

this.Text=GetFormulaValue("({0}/{1})*100", new string[] {"5.6","0"}).ToString();
// 正无穷大.





public object GetFormulaValue(string p_Formula, string[] p_Value)
{
string _Formula = string.Format(p_Formula, p_Value);
DataTable _CalculatedTable = new DataTable();
return _CalculatedTable.Compute(_Formula, "");
}
woodboy23 2009-04-15
  • 打赏
  • 举报
回复
用正则吧,呵呵
heruoyong 2009-04-15
  • 打赏
  • 举报
回复
我的思考如下:
ID NAME REGEXPRESSION

101 投入吨 15
102 成品吨 5.6
103 出片率=(102/101)*100


public Decimal GetPercent(ID)
{
String strExpression=REGEXPRESSION;
Regex objRegex=new Regex("^\s*(\s*(?<One>\d+)\s*/\s*(?<Two>\d+)\s*)\*100\s*$");
MatchCollection objMatches = objRegex.Matches(strExpression);

ID1=objMatches[0].Groups["One"].Value;
ID2=objMatches[0].Groups["Two"].Value;

//判断一下ID1\ID2的有效性
return (GetPercent(ID1)/GetPercent(ID2))*100;
}

这仅仅是个大概的思路,主要用到正则表达式的组匹配,也用到了递归,如果被除数有可能是0,需要判断一下,自己有任务没有多少时间,不好意思
yumanqing 2009-04-15
  • 打赏
  • 举报
回复
自己UP一下
keystudio 2009-04-15
  • 打赏
  • 举报
回复

//好吧 如果你一定要正则的话- -!
str = Regex.Replace(str, @"\d+", delegate(Match m) { return Search(m.Value); }, RegexOptions.IgnoreCase);

private string Search(string s)
{
if (s == "102")
return "5.6";
if (s == "101")
return "15";
return s;
}
yumanqing 2009-04-15
  • 打赏
  • 举报
回复
up,还未解决

111,094

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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