掌上百科 - PDAWIKI

 找回密码
 免费注册

QQ登录

只需一步,快速开始

查看: 983|回复: 20

[求助] 问一个TXT文件的转换问题

[复制链接]

该用户从未签到

发表于 2009-2-13 22:05:03 | 显示全部楼层 |阅读模式
是这样的,我从stardict上下载了一个字典,转为TXT后,发现里面凡是需要跳转的地方,语法格式都是<kref>abc</kref>;我的目标是把这样的一串字符替换为<A href="entry://abc">abc </A>,请问应如何替换实现?

该用户从未签到

发表于 2009-2-13 22:40:34 | 显示全部楼层
我还真是理解过于简单了。居然没看清有俩“abc”,不好意思啦!
' H" d, G3 H* e" x3 v-------------------------------------------------------------------------------------------------& f8 n# g, a2 q. K. d7 s
如果词典文件比较小,把内容粘贴到word文档里处理;如果词典比较大(比如20M以上),用UltraEdit32直接打开TXT处理!: Q- Q& M; W9 W% i/ z) }
不知道我理解得是不是过于简单了些?9 `1 i2 k% {- P
把词条(abc)前面和后面的各种字符分两次替换不就行了吗?(如附图所示); g" _8 r) q# }% A
6 C2 Q( \* j) D9 g  K
[ 本帖最后由 philostone 于 2009-2-14 20:32 编辑 ]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?免费注册

x

该用户从未签到

发表于 2009-2-13 22:58:12 | 显示全部楼层
用ultraedit吧!這個軟件很有用的!或者你不介意的話!可以上傳,看看有沒有辦法幫你轉成mdict用的格式!

该用户从未签到

发表于 2009-2-14 09:42:30 | 显示全部楼层
用正则表达式替换的话就比较简单。方法如下,用ultraedit打开文件,然后按Ctrl-R进入替换:
! p2 S' n( s6 c/ i7 f7 m6 [Find What 里填:  <kref>(.*)</kref>
2 U: o$ F/ Y+ v& }& JReplace with 填: <a href="entry://$1">$1</a>
) |9 x4 C( ~4 F' E勾选那个Regular Expression
# m4 f! L6 Z" H0 w0 U点击Advance, 选择 Regular Expression Engine 类型为 Perl2 \7 {  k. @/ n9 l4 L
然后Replace all.

该用户从未签到

发表于 2009-2-14 12:04:29 | 显示全部楼层
原帖由 rayman 于 2009-2-14 09:42 发表
- C/ d" U# D' z0 \" w7 z用正则表达式替换的话就比较简单。方法如下,用ultraedit打开文件,然后按Ctrl-R进入替换:
# {$ v' C  d* M0 X& @" e8 rFind What 里填:  (.*)* U  J3 R. g$ G3 u0 j2 g
Replace with 填: $1
  l* o" L  n' ?, K( s; D勾选那个Regular Expression
0 z8 p' ?( q1 p% R( A点击Advance, 选择 Regular Expression Engin ...
. W! ~- q* V" B5 ?' F) m" r) v  K
( b$ j6 \3 b' e
7 j7 g2 Z& z' H+ z
又学一招了,谢谢。7 k( e/ P" l4 Q* V; h9 ]; d
懂编程知识就是高效啊!

该用户从未签到

 楼主| 发表于 2009-2-14 13:42:37 | 显示全部楼层
感谢楼上各位的解答。
* j( h2 V5 u; j! `3 Y, G$ Y& Q2 y1 A3 x; u) C; X/ k" M
2楼的办法好像不行,因为我的目标表达式里面有两个abc,而用你的办法替换只能出现一个abc。* G% L( p2 U1 ?( \& d
# X* R! H$ N. z2 R# v, h
rayman老大的办法确实非常高效,但是又出现了新的问题:就是,有许多地方,比如说他们原来的内容是Voyez <kref>AVENANT</kref>. Pour Le participe passé ADVENU, voyez <kref>AVENU</kref>. / ~- f( Y* l& e% W
  l; h2 X" ?* E0 b
按照rayman的办法,替换之后的结果是Voyez <a href="entry://AVENANT</kref>. Pour Le participe passé ADVENU, voyez <kref>AVENU">AVENANT</kref>. Pour Le participe passé ADVENU, voyez <kref>AVENU</a>.
. |0 S% C- j+ y; ~$ Z% z, @+ n" c) s  ^7 t' m4 Z' t! ]
但事实上,我需要的结果是Voyez <a href="entry://AVENANT">AVENANT</a>. Pour Le participe passé ADVENU, voyez <a href="entry://AVENU">AVENU</a>.

该用户从未签到

发表于 2009-2-14 13:59:10 | 显示全部楼层
原帖由 zcm1019 于 2009-2-14 13:42 发表
/ q9 M$ T4 Y) E8 \3 Y感谢楼上各位的解答。
& W0 H  h- M( j8 r4 j6 O7 @7 A+ V
2楼的办法好像不行,因为我的目标表达式里面有两个abc,而用你的办法替换只能出现一个abc。
4 t' o0 k$ I% M
' H" [) m. m% v  ]0 x! Y. O9 Nrayman老大的办法确实非常高效,但是又出现了新的问题:就是,有许多地方,比如说他们原来的内 ...

0 Y9 A# w4 {4 `, r5 H: [1 z+ T$ n- |* X3 K1 U

/ o) E3 n. [* P因为你同一行里有两个</kref>,有个折衷的方法就是你把它弄成一行只有一个的就可以正常替换了。
* F6 o% u2 p! c! u不折衷的方法还是等R老大回复啊。

该用户从未签到

 楼主| 发表于 2009-2-14 14:32:59 | 显示全部楼层
是啊,我目前只能先把<kref>替换为^p<kref>,然后再按照rayman的步骤做。+ A/ {! y) o3 a: D8 I1 Y' b# T8 W

% x5 [$ W) J. Z* ^5 m东西转好了,等会上传。

该用户从未签到

发表于 2009-2-14 15:48:28 | 显示全部楼层
选择 Regular Expression Engine 类型为 Unix就可以了。

该用户从未签到

发表于 2009-2-14 16:28:28 | 显示全部楼层

回复 9楼 rayman 的帖子

貌似还是不行。

该用户从未签到

 楼主| 发表于 2009-2-14 18:42:43 | 显示全部楼层

回复 9楼 rayman 的帖子

改为UNIX确实不行啊。
# \# C( E9 U6 T7 H' v$ x3 t1 k
9 p- C# V9 j/ l& l7 z; O/ o6 m看了一下午的正则表达式教程,终于找到了一个比较好的办法了。
6 h$ D- P/ }3 c, H, J! y* I5 w0 @& Q1 w7 U% {' A$ g
就是在Find What 里填: <kref>(\w*)</kref>. V1 ]$ h0 o. ~" X! _$ B
- _  ]+ j! u7 ]- {7 N
其他仍按rayman的方法填。

该用户从未签到

发表于 2009-2-14 18:49:17 | 显示全部楼层

回复 11楼 zcm1019 的帖子

很强啊,我找半天都找不到。
* _' J) g* M3 q/ R! E谢谢啊,这个替换很有用。
, N, j5 e) k; q. ~3 I7 E1 A8 R, y4 G
[ 本帖最后由 tony4d 于 2009-2-14 18:51 编辑 ]

该用户从未签到

 楼主| 发表于 2009-2-14 19:01:40 | 显示全部楼层

回复 12楼 tony4d 的帖子

我找到的关于正则表达式的教程。9 h: A$ M& S2 H% ]8 `

/ a7 L, o) T, S% y' \  \http://unibetter.com/deerchao/zhengzhe-biaodashi-jiaocheng-se.htm8 U2 z2 |4 J  _* x7 u5 H) w" Y  P+ J5 }

: V/ H8 d2 g* H' e0 N尽管里面有若干错误,但瑕不掩瑜,毕竟是中文的看起来比较方便。

该用户从未签到

 楼主| 发表于 2009-2-14 20:14:14 | 显示全部楼层
还可以利用懒惰匹配
: Z& C7 {6 a. x5 t4 E/ l在Find What 里填: <kref>(.*?)</kref>

该用户从未签到

发表于 2009-2-14 20:34:32 | 显示全部楼层

回复 14楼 zcm1019 的帖子

为什么只是多了个“?”就可以了?
$ V. s9 Y. c- @0 ~2 D" W  |5 e; f' |' o/ Z5 Q# r! P* b
<kref>(.*?)</kref>与2 K3 G+ x+ `# v4 n6 C9 a7 k
<kref>(.*)</kref>0 E8 B) m- ?; I& [* y( J, `
有何区别吗?

该用户从未签到

 楼主| 发表于 2009-2-14 22:20:54 | 显示全部楼层
http://unibetter.com/deerchao/zhengzhe-biaodashi-jiaocheng-se.htm! M" }- f* V$ W( B+ @1 d
里面的懒惰匹配那一节。

该用户从未签到

发表于 2009-2-14 22:37:59 | 显示全部楼层

回复 16楼 zcm1019 的帖子

Bravo, thanks so much!

该用户从未签到

发表于 2009-2-15 00:03:01 | 显示全部楼层
奇怪,我试过改成unix就可以了哦。我的ultraedit版本是14.20.1.100, 不知道和版本是否有关。

该用户从未签到

发表于 2009-2-15 00:06:28 | 显示全部楼层
我是14.20.1.1008不行哦,奇怪。

该用户从未签到

发表于 2009-2-15 00:06:51 | 显示全部楼层
原帖由 tony4d 于 2009-2-15 00:06 发表
- X: j- P: d0 O7 r/ M/ A我是14.20.1.1008不行哦,奇怪。

$ A; O! o$ U- ~我是14.20.1.1008不行哦。

该用户从未签到

发表于 2009-2-15 10:05:57 | 显示全部楼层
可能是默认模式问题,用lazy match方式是对的。就是加多一个"?"
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

小黑屋|手机版|Archiver|PDAWIKI |网站地图

GMT+8, 2024-5-8 04:39 , Processed in 0.055898 second(s), 13 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表