![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-05 22:22 |
共 48,039 主题排行 / 350,124 发帖 / 今日 2 篇 / 48,251 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » 如何分离汉字行和非汉字行 |
| 可打印版本 8,536 / 51 |
| 第16楼 xhuser | 发表于 2007-05-12 21:05 |
| 新手上路 发帖 1 积分 2 | |
|
高手啊
|
|
| 第17楼 lxmxn | 发表于 2007-05-12 21:10 |
| 版主 发帖 4,938 积分 11,386 | |
Originally posted by abczxc at 2007-5-12 19:53: Linux 下的也可以在win下面使用啊。 发一个上来。 附件 sed.rar (40.33 KiB) |
|
| 第18楼 ebfok | 发表于 2007-05-12 21:19 |
| 初级用户 发帖 33 积分 87 来自 cs | |
|
我也来试试:把所有以汉字开头的一行和它下面的一行写入另外一个文本
Const ForReading = 1, ForWriting = 2 Dim fso, f,ff Set fso = CreateObject("Scripting.FileSystemObject") File = InputBox("请输入要处理文件路径和名称:") Set f = fso.OpenTextFile(File, ForReading, True) out = "" Do While f.AtEndOfStream <> True line = f.ReadLine If f.AtEndOfStream <> True Then If Asc(Left(line,1))<0 Or Asc(Left(line,1))>255 Then out = out & line & vbCrLf & f.ReadLine & vbCrLf End If Else out = out & line & vbCrLf End If Loop f.Close Set ff = fso.OpenTextFile(File & "_new.txt", ForWriting, True) ff.Write (out) ff.Close Msgbox "已生成新文件:" & File & "_new.txt!" 测试通过,请不要加行号! 将代码保存为filter.vbs再双击执行后输入你要处理的文件路径和名称如c:\windows\myfile.txt即可! [ Last edited by ebfok on 2007-5-12 at 09:28 PM ] |
|
| 第19楼 slore | 发表于 2007-05-12 22:19 |
| 铂金会员 发帖 2,478 积分 5,212 | |
|
Const ForReading = 1, ForWriting = 2
Dim fso, f,ff Set fso = CreateObject("Scripting.FileSystemObject") File = InputBox("请输入要处理文件路径和名称:") Set f = fso.OpenTextFile(File, ForReading, True) out = "" Do While f.AtEndOfStream <> True line = f.ReadLine ''If f.AtEndOfStream <> True Then '这个条件句是废的…… If Asc(Left(line,1)) < 0 or Asc(Left(line,1)) > 255 Then '小于0就是汉字了吧? out = out & line & vbCrLf & f.ReadLine & vbCrLf End If ''Else '' out = out & line & vbCrLf ''End If Loop f.Close Set ff = fso.OpenTextFile(File & "_new.txt", ForWriting, True) ff.Write out ff.Close MsgBox "已生成新文件:" & File & "_new.txt!" Set f=nothing Set fso =nothing |
|
| 第20楼 ebfok | 发表于 2007-05-13 09:09 |
| 初级用户 发帖 33 积分 87 来自 cs | |
Originally posted by slore at 2007-5-12 22:19: |
|
| 第21楼 ebfok | 发表于 2007-05-13 09:15 |
| 初级用户 发帖 33 积分 87 来自 cs | |
|
汉字的码的范围我不清楚,只随便找了几个汉字实验,反正汉字不可能在0-255之间就是,所以。。(恳请哪位知道的告知一下汉字的识别方法!)
再顺便问一下你用的什么vbs编辑器? [ Last edited by ebfok on 2007-5-13 at 09:19 AM ] |
|
| 第22楼 slore | 发表于 2007-05-13 09:22 |
| 铂金会员 发帖 2,478 积分 5,212 | |
|
明白你的意思了。。。但是你逻辑还是有问题。。报错是因为你又用了了次f.readline
所以第一的line是肯定可以读到的。你这个判断句应当在下面的判断句里面。 这样也一样…… 要这种格式的文本应该是成对的……不然偷个懒加on Error Resume Next |
|
| 第23楼 slore | 发表于 2007-05-13 09:27 |
| 铂金会员 发帖 2,478 积分 5,212 | |
|
一般脚本就直接用记事本,复杂点需要调试就扔VB里检测
汉字的ASC码是负的……而且根据ASC码的范围可以确定它的声母 实在不确定我觉得可以用排除法如果instr(0~9,a~z,A~Z。。再把标点算上) 就知道它是不是了。 |
|
| 第24楼 ebfok | 发表于 2007-05-13 09:33 |
| 初级用户 发帖 33 积分 87 来自 cs | |
|
之所以用两次readline是按LZ的要求:把所有以汉字开头的一行和它下面的一行写入另外一个文本。如果能进入DO..LOOP循环,第一次readline是肯定能读到,问题是第二次就不一定了,一开始我也是想要加个on Error Resume Next,后来不知怎么就忘了,现在想来要是加了on Error Resume Next就不会报错就不会想到要加那个条件句,看样子还是不加on Error Resume Next的好!
|
|
| 第25楼 slore | 发表于 2007-05-13 09:38 |
| 铂金会员 发帖 2,478 积分 5,212 | |
|
当然先是不加。。。。找到错误知道错误原因后发现就是最后一次读取不存在导致的。。在VB里都是GOTO ERRLINE看下ERR.DESCRIPTION调试好了,再考虑是用哪个比较好。
|
|
| 第26楼 ebfok | 发表于 2007-05-13 09:47 |
| 初级用户 发帖 33 积分 87 来自 cs | |
|
我学脚本都是小打小闹,大部分时候用的notepad,出了错没想到借助工具进行调试,所以每次出了错都是百思不得其解,效率很低,这次见识到兄的调试经验,很有启发,以后我会学着在vb中调试的!I like this forum!
|
|
| 第27楼 slore | 发表于 2007-05-13 10:13 |
| 铂金会员 发帖 2,478 积分 5,212 | |
|
要是调试VB的话下个精简版就好了6MB大小……
VB和脚本还是有些差别,比如读取文本在工程里VB要用绝对路径。。。。不然找不到文件。。。 VB里主要可以F8单步执行,就可以一句句看。。。代码的流程和变量的赋值都一清二楚。 |
|
| 第28楼 bhsx | 发表于 2007-05-13 17:32 |
| 初级用户 发帖 21 积分 43 | |
|
findstr /r /n "." 1.txt >1.tmp
for /f "delims=:" %%i in ('findstr /r /i /v "*:" 1.tmp') do call:LLL %%i for /f "tokens=1,2 delims=:" %%i in (2.tmp) do echo %%j >>2.txt del 1.tmp del 2.tmp 2.txt goto:eof :LLL set /a jk=%1+1 findstr /r "^%1: ^%jk%:" 1.tmp >>2.tmp set jk= [ Last edited by bhsx on 2007-5-13 at 06:00 PM ] |
|
| 第29楼 abczxc | 发表于 2007-05-13 18:50 |
| 初级用户 发帖 53 积分 135 | |
|
对于vbs的编辑器
感性来说我喜欢notepad,理性来说我喜欢emditor…… |
|
| 第30楼 abczxc | 发表于 2007-05-13 19:05 |
| 初级用户 发帖 53 积分 135 | |
|
谢谢楼上的同志啊
If Abs(Asc(whichChar))>127 Then Response.write whichChar & "是一个汉字" Else Response.write whichChar & "不是一个汉字" |
|
| 上一页 1 2 3 4 下一页 |
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |