| zhu_jihui 回复于:2005-09-01 13:10:56
|
很好,偶看可行!建议加精
|
| xuguopeng 回复于:2005-09-01 13:11:08
|
不错 加精~
不过如果把RPGLE的代码逐句注解出来 相信会成为一个好的模糊查询教材~~
|
| zhu_jihui 回复于:2005-09-01 13:15:24
|
楼主,是原创吗?
|
| teresa99 回复于:2005-09-01 13:15:39
|
楼主,俺对你的敬仰如滔滔江水。。。
|
| armycat 回复于:2005-09-01 13:16:50
|
是俺今天上午抽空瞎写的,多多指教,多多指教。
|
| Inyan 回复于:2005-09-01 13:17:41
|
呵呵,看起来比我们那个模糊查询代码要少些。
:wink:
|
| zhu_jihui 回复于:2005-09-01 13:19:47
|
那时当然了呵呵!!
|
| mamei 回复于:2005-09-01 13:30:38
|
我正在搞模糊查询的东东!
多谢了
|
| armycat 回复于:2005-09-01 14:00:51
|
刚刚把说明4中提到的问题修正了一下:
1、增加了两个配列:AR2中存放各字串的内容(长度40的入力项最多有20个字串,每个字串最大长度40),AR3中存放各字串的长度。
D AR2 S 40 DIM(20)
D AR3 S 2 0 DIM(20)
2、@KEN01做以下修正:
C @KEN01 BEGSR
C*
C* 取得各子字符串放入配列
C Z-ADD 1 W#FROM
C Z-ADD *ZERO W#N
[color=red:fa551973d8]C MOVEA D#ADDR AR1[/color:fa551973d8]
C*
C DO *HIVAL
C*
C* 第一个空格以外的字符位置 = W#FROM
C ' ' CHECK D#ADDR:W#FROM W#FROM 91
C N91 LEAVE
C*
C* 下一个空格的位置 = W#TO
C ' ' SCAN D#ADDR:W#FROM W#TO 91
C N91 LEAVE
[color=red:fa551973d8]C*
C* 判断子字符串开头是否为汉字起始控制符
C IF AR1(W#FROM) = X'0E'
C ADD 1 W#FROM
C ENDIF
C*
C* 判断子字符串结尾是否为汉字结束控制符
C IF AR1(W#TO - 1) = X'0F'
C SUB 1 W#TO
C ENDIF[/color:fa551973d8]
C* 子字符串长度 = W#LEN
C W#TO SUB W#FROM W#LEN
C*
C IF W#LEN <> *ZERO
C*
C* 子字符串 = W#SUB
C W#LEN SUBST(P) D#ADDR:W#FROM W#SUB
C*
C* 写入配列
C ADD 1 W#N
C MOVEL(P) W#SUB AR2(W#N)
C Z-ADD W#LEN AR3(W#N)
C*
C ENDIF
C*
C* 下一次取子字符串的开始位置 = W#FROM
C 1 ADD W#TO W#FROM
C*
C ENDDO
C*
C SETOFF 92
C *LOVAL SETLL ADDRESR
C READ ADDRESR 90
C DOW *IN90 = *OFF AND #RRN01 < 9999
C*
C* 模糊检索
C 1 DO W#N W#I
C Z-ADD AR3(W#I) W#L
C AR2(W#I):W#L SCAN ADADDR 92
C N92 LEAVE
C ENDDO
C*
C 92 EXSR @WRT01
C*
C READ ADDRESR 90
C ENDDO
C*
C ENDSR
3、@DEF中增加三个工作变量的定义:
C MOVEL *BLANK W#N 2 0
C MOVEL *BLANK W#I 2 0
C MOVEL *BLANK W#L 2 0
可能有仔细的朋友会发现我定义了一个不必要的变量W#L。这是没有办法的事情,否则AR2(W#I):W#L SCAN ADADDR 一行会超长。
|
| nhxingliang 回复于:2005-09-01 16:46:18
|
谢谢.........
认真学习.....................
|