日期:2014-05-20  浏览次数:20772 次

由字符串处理引发的对.NET与C/C++的思考
前段时间想简化一个对字符串进行处理的逻辑。
原来的逻辑是:从数据库中提取数据,以字符串的格式返回。
格式为“(总行数);(所提取列,以逗号分隔);(提取到的数据,列之间以逗号分隔,行之间以分号分隔)”
例如:“3;name,id;test1,1;test2,2;test3,3”等于
name       id
test1      1
test2      2
test3      3

以前的处理方法是用公共方法将此字符串转换为ArrayList包含Hashtable的形式,但是我发现这种方式因为频繁转换导致效率很低,所以我想直接对字符串进行处理。
目前已经做到的是:1.提取指定列名对应的所有值;2.删除与指定值相匹配的所有行;

完成这个之后我想要对字符串的处理进行扩展一下比如:
1.从给定字符串中提取所有与指定内容相匹配的子字符串;---可以通过Regex实现
2.删除给定字符串中出现的所有与指定内容相匹配的子字符串,自动左对齐;
3.获取给定字符串中所有与指定内容相匹配的子字符串的索引;
4.提取给定字符串中所有出现的数字,以数字或者字符串形式返回;

这些都可以实现,只是我一直认为在.net上面开发就像是在火车上跑步,你可以跑的很快,但是你永远无法超过火车。
而C/C++开发呢,你可以是骑单车的小子,可以是小轿车司机,可以是火车车长,甚至可以使和谐号,波音7*7,可以是战斗机,可以是任何你能想到的东西。

鉴于此,我想用C/C++开发一个公共方法的dll,然后在.net中调用,虽然还是无法自由驰骋,至少可以在火车上跑得更快一些。
不知我这种想法可以吗?
------解决方案--------------------
呵呵
1.net自己处理字符串操作本身就是用c++写滴
2.只是因为lz的要求比较特殊,所以才觉着别扭
3.lz的要求往大了说是文法解析,往小了说是协议解析
4.即使是c++在文法解析和协议解析处理上都是相对比较特殊滴,都是根据协议本身自己去做特定处理滴。
5.当然文法解析这块在c++里不是没有通用引擎可以用,c++一般可以使用yacc,tex做文法解析定义
6.实际上net里也有通用文法解析引擎,比如irony

最后总结一下,lz这种规则没那么复杂的文本并没必要采用那么复杂的通用文法解析引擎完成,自己随便用简单的token定义一下规则即可,至于是用c++完成,还是用net完成都可以