刚看到这个帖子,有意思。现在下班,占个位,回家晚饭后奉上代码。
程序长了点,将就着看吧,但程序的脉络应该还是很清晰的,呵呵。
程序代码:
**********************************************************
* 找出三个字段之间规律的算法: *
* 第一个字段,以“[”为界,用LEFT()函数取该界的左侧全部 *
* 当然,从第二条记录开始,该字段的左侧开始部位的取值*
* 应该以上一条记录的最后一个中文字为准; *
* 第二个字段,很好分界,从“[”开始,到最近的第一个中文 *
* 字前面一个字符结束; *
* 第三个字段,从最近的第一个中文字开始,到最近的最后一个*
* 中文字结束。 *
**********************************************************
CLOSE ALL
SET DEFAULT TO E:\RR\Foxpro\
SET SAFETY OFF
Cstr=" how often[]多久一次 exercise['eks2saiz]v.&n.锻炼;运动 skateboard[]v.踩滑板;参加滑板运动 hardly['ha:dli]adv. 几乎不;几乎没有 ever['ev2]adv. 曾;曾经 shop[60p]v.购物 once[w3ns]adv. 一次"
IF !FILE("拆分字符串.DBF")
CREATE TABLE 拆分字符串.DBF FREE ;
(单词 C(15), 音标 C(20), 汉意 C(30))
ELSE
USE 拆分字符串.DBF
ZAP
ENDIF
STORE 1 TO 左边界, 右边界, 左中括号次数, 右中括号次数
字符串长度=LEN(Cstr)
右中括号个数=OCCURS("]",Cstr)
DO WHILE 右边界<字符串长度
*********************
* 取第一个字段内容 *
*********************
STORE "" TO 单词内容,音标内容,汉意内容
左中括号位置=AT("[",Cstr,左中括号次数)
右边界=左中括号位置-1
FOR I=左边界 TO 右边界
单词内容=单词内容+SUBSTR(Cstr,I,1)
NEXT
单词内容=LTRIM(单词内容)
*********************
* 取第二个字段内容 *
*********************
左边界=左中括号位置
右中括号位置=AT("]",Cstr,右中括号次数)
FOR J=右中括号位置+1 TO 字符串长度 &&查找汉字位置
IF ASC(SUBSTR(Cstr,J,1))>128
右边界=J-1 &&第一个汉字的左边一位就是“音标”字段的结束
EXIT
ENDIF
NEXT
FOR I=左边界 TO 右边界
音标内容=音标内容+SUBSTR(Cstr,I,1)
NEXT
音标内容=LTRIM(音标内容)
*********************
* 取第三个字段内容 *
*********************
左边界=右边界+1
FOR J=左边界 TO 字符串长度 &&查找汉字位置
IF ASC(SUBSTR(Cstr,J,1))<129
右边界=J-1 &&第一个非汉字的左边一位就是“汉意”字段的结束
EXIT
ELSE
IF 右中括号次数=右中括号个数 AND J=字符串长度
右边界=J
ENDIF
ENDIF
NEXT
FOR I=左边界 TO 右边界
汉意内容=汉意内容+SUBSTR(Cstr,I,1)
NEXT
汉意内容=LTRIM(汉意内容)
*******************
* 插入各字段内容 *
*******************
INSERT INTO 拆分字符串.DBF VALUES (单词内容,音标内容,汉意内容)
***************
* 重置各位置 *
***************
左边界=右边界+1
左中括号次数=左中括号次数+1
右中括号次数=右中括号次数+1
ENDDO
CLOSE ALL
SET SAFETY OFF
RETURN
程序运行的结果也符合要求,并完美地消除了字符串中的前导空格:
图片附件: 游客没有浏览图片的权限,请
登录 或
注册
[
本帖最后由 taifu945 于 2012-9-25 21:52 编辑 ]