一个字符串中可能包含数字、汉字和'=',现在为了处理方便,想把其中的按一定规则截取出来
例子如下:
字符串为:期初余额("包含未记帐凭证=是 且 日期=本期 且 科目=1009   其他货币资金 且 科目编码<'1200' 且 科目名称='货币资金' 且 科目类型=负债",)
想截取后的效果为
需截取名称:期初余额
条件需分批截取:例如:1、包含未记帐凭证 2、= 3、是 
                      4、日期  5、=     6、本期
                      7、科目  8、=     9、1009
                      ……
希望高手多多帮忙,最好有代码,谢谢了

解决方案 »

  1.   

    你这个似乎从财务软件上靠下来的,我觉得应该用关键字来分析,
    比如 期初余额(
    你就要找"(",这是肯定的,
    i:= pos(s,'(') ;
    s1:= copy(s,i-1,length(s))我一般也就这么做,不知道行不行
      

  2.   

    算期初余额呢?哈哈,以前做过一些财务软件,这些概念还是好熟悉哦!帮帮你吧。期初余额("
    包含未记帐凭证=是 且 
    日期=本期 且 
    科目=1009   其他货币资金 且 
    科目编码<'1200' 且 
    科目名称='货币资金' 
    且 科目类型=负债")解决方案一:
    问题出在你的这个字符串中包含了汉字!只要包含汉字那么就存在处理半个汉字问题。比较麻烦,建议你用英文代替,比如qcye("bhwjzpz='y' and date='benqi' and ...")然后在做个二维数组来映射汉字和英文之间的对应关系即可。解决方案二:
    如果实在想用汉字,OK,没关系,问题可能出在你把多个条件都写在同一个行里了,逻辑复杂。了。你需要分行来存储不行了么,用StringList来存储,而不是String。sl:= TStringList.Create();
    sl.Add('包含未记帐凭证=是'); 
    sl.Add('日期=本期'); 
    sl.Add('科目=1009   其他货币资金'); 
    sl.Add('科目编码<'1200''); 
    sl.Add('科目名称='货币资金'); 
    sl.Add('科目类型=负债');处理的时候这么写:
    for N:= 0 to sl.Count - 1 do
    begin
      if Pos('<', sl[N]) <> 0 then
        ...
      else if Pos('=', sl[N]) <> 0 then
        ...
      else 
        ...
    end;