这么点数据量,跟配置没有关系,算法问题而已。

授人以渔,不授人以鱼。
2012-09-26 13:47
2012-09-26 13:50

2012-09-26 13:57
2012-09-26 14:48

2012-09-26 15:04
2012-09-26 15:07

2012-09-26 15:14
程序代码:**********************************************************
* 找出三个字段之间规律的算法: *
* 第一个字段,以“[”为界,用LEFT()函数取该界的左侧全部 *
* 当然,从第二条记录开始,该字段的左侧开始部位的取值*
* 应该以上一条记录的最后一个中文字为准; *
* 第二个字段,很好分界,从“[”开始,到最近的第一个中文 *
* 字前面一个字符结束; *
* 第三个字段,从最近的第一个中文字开始,到最近的最后一个*
* 中文字结束。 *
**********************************************************
CLOSE ALL
SET DEFAULT TO C:\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. 一次 ABC"
IF !FILE("拆分字符串.DBF")
CREATE TABLE 拆分字符串.DBF FREE ;
(单词 C(15), 音标 C(20), 汉意 C(30))
ELSE
USE 拆分字符串.DBF
ZAP
ENDIF
STORE 1 TO 左边界, 右边界, 左中括号次数, 右中括号次数
字符串长度=LENC(Cstr)
右中括号个数=OCCURS("]",Cstr)
DO WHILE 右边界<字符串长度
*********************
* 取第一个字段内容 *
*********************
STORE "" TO 单词内容,音标内容,汉意内容
左中括号位置=ATCC("[",Cstr,左中括号次数)
右边界=左中括号位置-1
FOR I=左边界 TO 右边界
单词内容=单词内容+SUBSTRC(Cstr,I,1)
NEXT
*********************
* 取第二个字段内容 *
*********************
左边界=左中括号位置
右中括号位置=ATCC("]",Cstr,右中括号次数)
右边界=右中括号位置+1
DO WHILE 右边界<=字符串长度 &&查找汉字位置
IF ASC(SUBSTRC(Cstr,右边界,1))>128
右边界=右边界-1 &&第一个汉字的左边一位就是“音标”字段的结束
EXIT
ELSE
右边界=右边界+1
ENDIF
ENDDO
FOR I=左边界 TO 右边界
音标内容=音标内容+SUBSTRC(Cstr,I,1)
NEXT
*********************
* 取第三个字段内容 *
*********************
左边界=右边界+1
右边界=左边界
DO WHILE 右边界<=字符串长度 &&查找汉字位置
IF ASC(SUBSTRC(Cstr,右边界,1))<129
右边界=右边界-1 &&第一个非汉字的左边一位就是“汉意”字段的结束
EXIT
ELSE
右边界=右边界+1
ENDIF
ENDDO
FOR I=左边界 TO 右边界
汉意内容=汉意内容+SUBSTRC(Cstr,I,1)
NEXT
*******************
* 插入各字段内容 *
*******************
INSERT INTO 拆分字符串.DBF VALUES (LTRIM(单词内容),LTRIM(音标内容),LTRIM(汉意内容))
***************
* 重置各位置 *
***************
左边界=右边界+1
左中括号次数=左中括号次数+1
右中括号次数=右中括号次数+1
IF 右中括号次数>右中括号个数
EXIT
ENDIF
ENDDO
CLOSE ALL
SET SAFETY OFF
RETURN
2012-09-26 16:47
2012-09-27 10:14
程序代码:CLEAR DECLARE LONG GetTickCount IN WIN32API SS=0 Start=GetTickCount() FOR I=1 TO 10000000 SS=SS+1 NEXT ?"FOR 循环1000万次的时间为:"+STR(GetTickCount()-Start,5)+"毫秒"+CHR(13)+CHR(13) FONT "微软雅黑", 12 SS=0 I=1 Start=GetTickCount() DO WHILE I<10000001 SS=SS+1 I=I+1 ENDDO ?"DO WHILE 循环1000万次的时间为:"+STR(GetTickCount()-Start,5)+"毫秒" FONT "微软雅黑", 12 CLEAR DLLS RETURN
2012-09-27 10:59