docno;txtype;txmsg
S328924;1;3152||||0|||2|0.00|796.00||0.00|676.00|700.00|24.00|CH|1|1|
S328924;2;3152|||||0147000008|||A03760|014700|070000||2|0.00|0|0|0|0|0||||120.00||||||||||||||||0.00|676.00|
S328924;4;3152|CH|0|700.00|700.00|||||
S328925;1;3152||03205275||0|||2|0.00|1210.00||0.00|1210.00|1300.00|90.00|CH|2|1|
S328925;2;3152||03205275|||0136000007|||A56210|013600|136100||1|0.00|0|0|0|0|0||||0.00||||||||||||||||0.00|40.00|
S328925;2;3152||03205275|||0136000007|||A56210|013600|136100||1|0.00|0|0|0|0|0||||0.00||||||||||||||||0.00|1170.00|
S328925;4;3152|CH|0|1300.00|1300.00|||||
数据是分有三个字段组成的,docno(票据号),txtype(类型),txmsg(明细项目),一张票据由三行数据构成,由类型来区别,1是售价,付款明细,2是售卖明细,4,最终付款数,但在类型1和2的时候,如果是vip的话,还记录着vip卡的卡号,请问各位大下,我如何写个自定义函数,可以分别把我需要的内容拆分出来,就是把那个|分隔的内容拆出来,记录到数组里面,困难在于,类型2里,有的有vip卡号,有的没有,所以小弟不知道给如何写,跪求大下们辅导一下

解决方案 »

  1.   

    拆分字符串用split就好了啊!
    定义一个数组  DIM AAA
    AAA=split(string,"|")
      

  2.   

    先用REPLACE函数把超过一个的|替代成一个|
    比如:
    Dim Str as String
    Str="kuhh||9879873||lifjasff|||98793......"
    Str=Replace(Str,"||","}")再把替换好的字符串用Split函数分解成一段一段的字符串数组
    比如:
    Dim A() as String
    A()=Split(Str,"|")   第三步,还是用Split把每一段字符串以“;”分割成不同的字段看你写的数据很乱,不知道实际上是否有这么多“|”
    应该更有规律的吧,楼主先找到规律,再用上面说的办法自己试试吧,不难的。
      

  3.   

    那个03205275是不是vip卡号?
    如果是的话,你可以通过类型1的数据行来判断相应的类型2数据行中有没有卡号
    如:S328924;1;3152||||0|||2|0.00|796.00||0.00|676.00|700.00|24.00|CH|1|1|
    3152后面那个分割符中为空||||就没有卡号
    而S328925;1;3152||03205275||0|||2|0.00|1210.00||0.00|1210.00|1300.00|90.00|CH|2|1|
    3125后面是:||03205275|| 说明是用卡的,它的类型2的数据行中就有卡号
      

  4.   

    把楼主的|数了下,个数完全不等,楼主还是先搞清楚别人的|怎么分的,在用split处理吧。
      

  5.   

    楼主我有两个问题:
       (1)“票据号”和VIP卡号在书写上有什么差别?
       (2)“|”怎么隔开的?
    楼主请作答!