| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 616 人关注过本帖
标题:字符串拆分
只看楼主 加入收藏
ljf3386
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2015-12-7
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:12 
字符串拆分
如何用将下表

A522K0    22OK    C108,C301-C306,C411,C501

拆分成
A522K0    22OK    C108
A522K0    22OK    C301
A522K0    22OK    C302
A522K0    22OK    C303
A522K0    22OK    C304
A522K0    22OK    C305
A522K0    22OK    C306
A522K0    22OK    C411
A522K0    22OK    C501
搜索更多相关主题的帖子: 字符串 如何 
2015-12-07 22:02
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:4 
程序代码:
CLEAR ALL
CLEAR 
DIMENSION aSplit[1]
cString = "C108, c301 -C306,A411,C501,"
IF Split(@aSplit, cString, "C") > 0
    FOR nIndex = 1 TO ALEN(aSplit, 1)
        ? aSplit[nIndex]
    NEXT 
ENDIF 
CLEAR ALL
RETURN 

FUNCTION Split(taSplit, tcString, tcBegin)
    LOCAL laTemp[1], lnBeginLength, lnLines, lnCount
    
    lnBeginLength = LEN(tcBegin)
    lnCount = 0
    lnLines = ALINES(laTemp, tcString, 1+4+8, ",")
    IF lnLines > 0
        LOCAL lnLine
        FOR lnLine = 1 TO lnLines
            IF UPPER(LEFT(laTemp[lnLine], lnBeginLength)) == UPPER(tcBegin)
                lnCount = lnCount + 1
                DIMENSION taSplit[lnCount]
                LOCAL lnPos
                lnPos = AT("-", laTemp[lnLine])
                IF lnPos > 0
                    taSplit[lnCount] = LEFT(laTemp[lnLine], lnPos - 1)
                    LOCAL lnFrom, lnTo, lnIndex
                    lnFrom = VAL(SUBSTR(laTemp[lnLine], lnBeginLength + 1, lnPos - lnBeginLength - 1)) + 1
                    lnTo = VAL(SUBSTR(SUBSTR(laTemp[lnLine], lnPos + 1), lnBeginLength + 1))
                    FOR lnIndex = lnFrom TO lnTo
                        lnCount = lnCount + 1
                        DIMENSION taSplit[lnCount]
                        taSplit[lnCount] = tcBegin + TRANSFORM(lnIndex)
                    NEXT 
                ELSE
                    taSplit[lnCount] = laTemp[lnLine]
                ENDIF 
            ENDIF 
        NEXT 
    ENDIF 

    RETURN lnCount
    
ENDFUNC 


[此贴子已经被作者于2015-12-7 23:09编辑过]


授人以渔,不授人以鱼。
2015-12-07 23:06
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:4 
上传表看看

坚守VFP最后的阵地
2015-12-07 23:09
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
得到aSplit[]数组之后,循环给目标表添加记录即可。注意我示例中修改过的传入字符串,有各种容错,以及排除不需要数据的成分。除非你的数据够变态,否则大部分的容错都考虑到了。

[此贴子已经被作者于2015-12-7 23:31编辑过]


授人以渔,不授人以鱼。
2015-12-07 23:11
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
简单点,自己修改下即可
程序代码:
CLEAR
cStr="C108,C301-C306,C411,C501"
nCOL=ALINES(ACSTR,CSTR,",")

FOR I=1 TO nCOL
    A1=ACSTR[I]
    IF "-"$A1
        =ALINES(AA,A1,"-")
        FOR J=VAL(SUBSTR(AA[1],2)) TO VAL(SUBSTR(AA[2],2))
            ?"C"+STR(J,3)
        ENDFOR
    ELSE
        ?A1
    ENDIF
ENDFOR


[此贴子已经被作者于2015-12-7 23:31编辑过]


坚守VFP最后的阵地
2015-12-07 23:29
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:4 
程序代码:
ALINES(aa1, "A522K0    22OK    C108,C301-C306,C411,C501", 4, " ")
ALINES(aa2, aa1[3], ",")
FOR EACH aa2i IN aa2
    ALINES(aa3, aa2i, "-")
    FOR i = VAL(RIGHT(aa3[1],3)) TO VAL(RIGHT(aa3[ALEN(aa3)],3))
        ? aa1[1], aa1[2], "C"+TRANSFORM(i)
    ENDFOR
ENDFOR  
2015-12-07 23:31
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
程序代码:
sz = "A522K0    22OK    C108,C301-C306,C411,C501"
ALINES(aa1, strt(sz, "C", ""), 4, " ")
ALINES(aa2, aa1[3], ",")
FOR EACH aa2i IN aa2
    ALINES(aa3, aa2i, "-")
    FOR i = VAL(aa3[1]) TO VAL(aa3[ALEN(aa3)])
        ? aa1[1], aa1[2], "C"+TRANSFORM(i)
    ENDFOR
ENDFOR  
2015-12-07 23:35
ljf3386
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2015-12-7
收藏
得分:0 
谢谢大家,新手我没表达清楚,上传表,请各位高手再帮下,谢谢!
biao.rar (3.46 KB)
2015-12-08 08:09
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:400
帖 子:11857
专家分:43421
注 册:2006-5-13
收藏
得分:4 
这样的拆分应该是基本功能,没有什么难度,参考帮助文件或者教材应该可以做到的。

活到老,学到老!http://www.(该域名已经被ISP盗卖了)E-mail:hu-jj@
2015-12-08 08:14
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
意思要表达清楚

坚守VFP最后的阵地
2015-12-08 08:42
快速回复:字符串拆分
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020360 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved