主题:請教如何這樣截取字段?
rzhang168
[专家分:360] 发布于 2010-02-01 15:29:00
我有一個日漢檔案,裡面exp 域既有日文,也有中文,如:
“中文【日文】,中文【日文】中文”
“【日文】中文,中文【日文】中文”
總之,日文都在"【】"之間,位置不固定,數量也不固定
我現在想將中日文拆開,將所有日文都抽出來,放入 jap 域;所有中文也抽出來,放入 Han 域。我寫了一段代碼,但離效果相差甚遠,希望大家指點一二,這是我的代碼:
Clear All
Select A
Use Jhdict
Go Top
Scan For "["$exp And "]"$exp
Wait Window Str(Recno('Jhdict'))+"/"+Str(Reccount('Jhdict')) Nowait
Han=""
Jap=""
For i=1 To N
If Substrc(Alltrim(exp), i, 1)#"["
Loop
Else
Han=Han-Substrc(Alltrim(exp), 1, i-1)
Jap=Jap-Substrc(Alltrim(exp), i,Atc("]",exp)-i)
Exit
Endif
Endfor
Replace Jap With jap, Han With han
Endscan
最后更新于:2010-02-01 19:26:00
回复列表 (共8个回复)
沙发
So_Show [专家分:470] 发布于 2010-02-01 16:24:00
你好,很想为你解答..不过我还是不太理解-.-
是不是想把exp字段中 如exp字段内容为“啊是的【HJK】,的发个【YYY】的发个经过”
存在Jap : HJKYYY
存在Han :啊是的,的发个的发个经过
是这样么? 还有上面HJK跟YYY需要啥符号分割不?
晚点再回来看看=。=~~
不重复回帖了-。-~~先工作先..晚点写给你.
板凳
rzhang168 [专家分:360] 发布于 2010-02-01 16:47:00
呵呵,這么快就有高手來指點,先謝謝了
我還在埋頭研究呢,忘了刷新網頁,不好意思
是的,就是你理解的那樣,不過我要將日文依然用【】括起來,有幾個日文,就要有幾個【】,這樣也方便日後進一步編輯。
也就是要處理成
Jap 域應該是:【HJK】【YYY】
Han 域應該是:啊是的,的发个的发个经过
3 楼
So_Show [专家分:470] 发布于 2010-02-01 18:50:00
FUNCTION gcGetSS
*-- tcStr传入检测字符串 传入类型为C
*-- tlruntype传入检测类型
*-- 例子: "啊是的【HJK】,的发个【YYY】的发个经过"
*-- gcGetSS("啊是的【HJK】,的发个【YYY】的发个经过",0) 返回 啊是的,的发个的发个经过
*-- gcGetSS("啊是的【HJK】,的发个【YYY】的发个经过",1) 返回 【HJK】,【YYY】
LPARAMETER tcStr,tlSearchType
IF ISNULL(tcStr)
RETURN ''
ENDIF
IF PARAMETERS()<2
tlSearchType=0
ENDIF
LOCAL lc执行类型,c返回中文,c返回日文
lc执行类型=.F.
c返回中文=''
c返回日文=''
IF ATC('【',tcStr)=0
RETURN IIF(tlSearchType=0,tcStr,'')
ENDIF
FOR i=1 To lenc(tcStr)
lcChr=Substrc(tcStr,i,1)
IF lcChr='【'
lc执行类型=.T.
ENDIF
IF lc执行类型
c返回日文=c返回日文+Substrc(tcStr,i,1)
ELSE
c返回中文=c返回中文+Substrc(tcStr,i,1)
ENDIF
IF lcChr='】'
lc执行类型=.F.
ENDIF
ENDFOR
RETURN IIF(tlSearchType=0,c返回中文,c返回日文)
随便写个参数,可能没啥效率-。- 你试下吧
里面很多代码可以删除,不过大多是为了检测函数完全性
?gcGetSS("啊是的【HJK】,的发个【YYY】的发个经过",0)
?gcGetSS("啊是的【HJK】,的发个【YYY】的发个经过",1)
4 楼
So_Show [专家分:470] 发布于 2010-02-01 18:53:00
你上面的那个可以直接改成
Clear All
Select A
Use Jhdict
Go Top
Scan
Wait Window Str(Recno('exp'))+"/"+Str(Reccount('exp')) Nowait
Replace Han With gcGetSS(exp),;
Jap With gcGetSS(exp,1)
Endscan
5 楼
rzhang168 [专家分:360] 发布于 2010-02-01 18:58:00
先评分,再拜读!
6 楼
So_Show [专家分:470] 发布于 2010-02-01 19:01:00
另外如果不想用函数调用,你的代码也可以改为,我自己没测试-,- 可能有些手误会出错 你自己测试下
*-----------------------------------------------------------------------------
Clear All
Select A
Use Jhdict
Go Top
LOCAL lc执行类型,c返回中文,c返回日文,lcChr
Scan For
Wait Window Str(Recno('exp'))+"/"+Str(Reccount('exp')) Nowait
IF ATC('【',tcStr)=0
Replace Jap With '', Han With exp
loop
ENDIF
lc执行类型=.F.
c返回中文=''
c返回日文=''
For i=1 To lenc(tcStr)
lcChr=Substrc(cStr,i,1)
IF lcChr='【'
lc执行类型=.T.
ENDIF
IF lc执行类型
c返回日文=c返回日文+Substrc(cStr,i,1)
ELSE
c返回中文=c返回中文+Substrc(cStr,i,1)
ENDIF
IF lcChr='】'
lc执行类型=.F.
ENDIF
Endfor
Replace Jap With c返回日文, Han With c返回中文
Endscan
*-----------------------------------------------------------------------------
7 楼
rzhang168 [专家分:360] 发布于 2010-02-01 19:18:00
嗯,结果完全正确,这就是我想要的,谢谢你的帮忙!感觉自己差距太大了,我只能处理一个日文词组,如果一句中出现两个以上的,就不会了,想的我头疼。
8 楼
So_Show [专家分:470] 发布于 2010-02-01 19:33:00
总有一个过程的..多解决实际中遇到的问题,会慢慢进步的。。。一起加油哈-。-
其实实现的原理很简单。。
就是对要检测的字符逐个遍历
遇到>>【 就把他跟后面的加在 c返回日文这个变量后面, 直至遇到】为止
其他情况就就把他赋于 c返回中文
我来回复