![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-09-13 22:26 |
共 47,812 主题排行 / 349,916 发帖 / 今日 0 篇 / 48,268 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » 文件的文字与字母替换问题? |
| 可打印版本 6,399 / 29 |
| 第16楼 namejm | 发表于 2006-10-16 10:37 |
| 荣誉版主 发帖 1,737 积分 5,226 来自 成都 | |
|
看来set命令无法区分大小写,纯批处理恐怕难以实现,楼主还是去试试无奈何兄提供的sed命令吧,没必要强求用纯批处理来解决吧?
|
|
| 第17楼 pengfei | 发表于 2006-10-16 11:20 |
| 银牌会员 发帖 485 积分 1,218 来自 湖南.娄底 | |
|
在9楼namejm版主代码的基础上修改了一下, 可以区别大小写.
[ Last edited by pengfei on 2006-10-16 at 21:36 ] |
|
| 第18楼 namejm | 发表于 2006-10-16 11:37 |
| 荣誉版主 发帖 1,737 积分 5,226 来自 成都 | |
|
pengfei 的代码是通过探测每一个字符来替换的,用了 if 可以区别大小写的特性,思路确实不错。
使用这段代码来处理小块文本内容还是可行的,如果文本内容很多的话,速度就会比较慢了。楼主可以综合考虑一下。 |
|
| 第19楼 redtek | 发表于 2006-10-16 11:41 |
| 金牌会员 发帖 1,147 积分 2,902 | |
Originally posted by zouzhxi at 2006-10-15 22:51: 别人给你的这个文件,用个工具替换一下就可以~:) 因为这只是一次性的,你的朋友或许给你这样类型的文件只有这一次,不会经常, 而且解码要求只有一小部分,就是做完了自动处理也只是个半成品, (从心理因素讲:做半成品给朋友用自己也接受不了,没有挑战性和成就感,象是在打杂儿) ( 就像是走了一半将要到美丽公园的路,而中途不去就回家了一样,哈哈) 一次的文件还是用一些工具替换比较好~:) 但我猜这可能不是一次性的文件处理, 有可能是SQL存储上要用的私人性质编码和解码、 或是某个JavaScript上要用到的简单加密方式、 或是聊天要用到的明文简单加密编码,可能防止特殊字符或命令过滤或方便处理、 或是自定义上的象BASE64一样的编码和解码的应用、 或是某种日记等带有保密性的文档的自定义私有编码与解码等、 或是公司内部要求对某个文件内容进行的类似性的解码(如输入法、对照码表……) 所以,实际你上面的问题,如果每行数量不固定,如果有上万行,还含有特殊符号,等等……很多问题都会影响批处理的解决速度和解决办法。 例:几万行和几行的处理方法和算法也是不一样的:) 所以,如果你的内容不保密可以全上传上来让大家帮助你一起想办法。 请说明这件事的非常详细的应用(如果没有私人或企业秘密等条件所约束的话)~:) ) 一次的转换还是用工具好~:) ) 天天要用到的用批处理或调用工具的方便~:) ) 必须要用DOS而不是其它外部工具,这不太明白……(似乎要经常处理这些对吧?) |
|
| 第20楼 zouzhxi | 发表于 2006-10-17 01:20 |
| 中级用户 发帖 177 积分 430 来自 广东深圳 | |
|
TO redtek:
是的,我朋友发给我的文件都是这样的,我不得不重复翻出来,所以我想写一个批处理,,,不想用其他工具(因为烦琐),批处理我一次执行就可以了.... |
|
| 第21楼 zouzhxi | 发表于 2006-10-21 04:16 |
| 中级用户 发帖 177 积分 430 来自 广东深圳 | |
『第 17 楼』: 我弄了好久,用上面的办法太慢了。不太理想。有没有精简一点的,。。 |
|
| 第22楼 redtek | 发表于 2006-10-21 22:38 |
| 金牌会员 发帖 1,147 积分 2,902 | |
|
还有一种方法(只是原理):
) 读全部变量到数组(可以模拟出数组功能来) ) 以数组内容为目的标签直接跳转 ) 大写A与小写a同样指向标签A,在标签A内用IF判断大小写并替换 优点:二选一的方式只针对指定的字母,节省了每个字母都用IF判断的时间。 也就是说:只要替换内容分为大小写的,一次判断就够: 因为:如果 IF判断字母为大写(每个数组只装一个字符,省去了:~的提取运算), 那么就按大写的方式替换,否则一定是小写!所以一次判断解决。 如果是遇到其它符号,不管!反正是按数组内容跳标签的,到了属于它的标签内想怎么操作就怎么替换。 ) 当数组全部走一遍之后,意味着内存中的数组内变量已全部更改替换完成 ) 然后for循环再将数组内容从头到尾写回文件。 |
|
| 第23楼 redtek | 发表于 2006-10-21 22:46 |
| 金牌会员 发帖 1,147 积分 2,902 | |
|
例如:
) 提取全部文本到数组,每个字符占一个数组元素。 ) 以下面标签跳转: CALL :数组元素1的内容 就上面这一行就足够了:) 在下面是标签: :A 在标签A内来一个IF判断它是不是大写(是:替换什么字符), 如果它不是大写,那一定是小写,替换什么。 (所以这里一个判断就地了) :1 在1的标签内,不要判断了,直接替换就行了。 优点: 通用,想替什么就替什么。 ) 还有多少个要替换的内容往标签上加:) ) 最后当数组循环全走了一遍以后,一个FOR写文本内。 至于写进文本内的内容是不是一个元素就占一行的问题(要多少个元素占一行) 同样可以计算和 += 什么出来。 |
|
| 第24楼 95219320 | 发表于 2006-11-12 19:06 |
| 新手上路 发帖 1 积分 2 | |
|
用记事本的替换功能好了。
|
|
| 第25楼 vkill | 发表于 2006-11-13 01:29 |
| 金牌会员 发帖 1,744 积分 4,103 来自 甘肃.临泽 | |
|
sed 解决这类问题最爽了
|
|
| 第26楼 zouzhxi | 发表于 2006-11-15 03:58 |
| 中级用户 发帖 177 积分 430 来自 广东深圳 | |
|
这个问题差点忘了,,,
此问题未解决,,, 本人还在郁闷,,, 有没有更好的办法,,, 。。。。 |
|
| 第27楼 vkill | 发表于 2006-11-16 03:58 |
| 金牌会员 发帖 1,744 积分 4,103 来自 甘肃.临泽 | |
|
无奈何斑竹发的很详细了,怎么还没有解决?
|
|
| 第28楼 vkill | 发表于 2006-11-16 04:00 |
| 金牌会员 发帖 1,744 积分 4,103 来自 甘肃.临泽 | |
|
不嫌麻烦可以这样写:
sed "s/A/啊/g;s/a/阿/g;......................" life (..........继续添加) |
|
| 第29楼 hxuan999 | 发表于 2006-11-23 06:30 |
| 中级用户 发帖 161 积分 337 | |
|
没说的,顶一下
|
|
| 第30楼 myddos | 发表于 2007-09-06 09:49 |
| 新手上路 发帖 2 积分 4 | |
|
文本文档里不是有查找替换功能?
|
|
| 上一页 1 2 |
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |