中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
作者:
标题: 如何提取超长行指定字符串 上一主题 | 下一主题
suntb
高级用户





积分 581
发帖 277
注册 2006-12-23
状态 离线
『楼 主』:  如何提取超长行指定字符串

有一文本(飞信手机型号列表)存在超长行,我想提取其中指定的字符串,用P能实现吗?
文本部分示例如下,具体可看附件
批处理一:提取每一对括号内的前两个引号中的内容
1680C  1
310   3
2610  1
以此类推
批处理二:以每一对括号内的第二个引号中的内容为分类标志,提取相应的括号内的第一个引号中的内容
如示例中要提取分类标志为1的所有相应数值,则有
1680C
2610
等等,以此类推

  Quote:
mobiletype[0] = new Array("1680C","1","309");mobiletype[1] = new Array("310","3","14");mobiletype[1] = new Array("2610","1","103");......



  Quote:
或者问题简单化,能不能通过P处理的方式将此超长文本行以分号为分隔符变成如下短行
mobiletype[0] = new Array("1680C","1","309")
mobiletype[1] = new Array("2610","1","103")
mobiletype[2] = new Array("2630","1","200")
mobiletype[3] = new Array("2760","1","201")
mobiletype[4] = new Array("310","3","14")

[ Last edited by suntb on 2009-1-5 at 16:48 ]

附件 1: test.rar (2009-1-5 15:59, 2.94 K,下载次数: 13)
2009-1-5 15:59
查看资料  发短消息 网志   编辑帖子  回复  引用回复
suntb
高级用户





积分 581
发帖 277
注册 2006-12-23
状态 离线
『第 2 楼』:  

如果不用P的话怎么办?我还是喜欢使用P处理,不过P用来处理类似的超长行实在头痛啊

2009-1-5 16:01
查看资料  发短消息 网志   编辑帖子  回复  引用回复
linee
初级用户





积分 94
发帖 49
注册 2008-12-14
状态 离线
『第 3 楼』:  

先把超长行变短是不是好处理点呢?

  Quote:
mobiletype[0] = new Array("1680C","1","309")
mobiletype[1] = new Array("2610","1","103")
mobiletype[2] = new Array("2630","1","200")
mobiletype[3] = new Array("2760","1","201")
mobiletype[4] = new Array("310","3","14")
mobiletype[5] = new Array("3109c","1","296")
mobiletype[6] = new Array("3110C","1","153")
mobiletype[7] = new Array("3220","1","102")
mobiletype[8] = new Array("3230","1","2")
mobiletype[9] = new Array("3250","1","168")
……



2009-1-5 16:39
查看资料  发短消息 网志   编辑帖子  回复  引用回复
suntb
高级用户





积分 581
发帖 277
注册 2006-12-23
状态 离线
『第 4 楼』:  



  Quote:
Originally posted by linee at 2009-1-5 16:39:
先把超长行变短是不是好处理点呢?

如果能将超长行变短,其他的问题我自己可以解决了
问题是怎么通过P方式变短?

2009-1-5 16:45
查看资料  发短消息 网志   编辑帖子  回复  引用回复
linee
初级用户





积分 94
发帖 49
注册 2008-12-14
状态 离线
『第 5 楼』:  

超长行纯P可能读不出来,可能要借助第三方工具。

刚测试了下,P最长能处理8184个字符,用P处理的话,你这文本至少要分4次处理。

[ Last edited by linee on 2009-1-5 at 21:00 ]

2009-1-5 19:56
查看资料  发短消息 网志   编辑帖子  回复  引用回复
tireless
银牌会员





积分 2025
发帖 1122
注册 2007-9-5
状态 离线
『第 6 楼』:  

执行 set /p str=<test.txt,得到的 str 的值为 1023 个字符。

[ Last edited by tireless on 2009-1-6 at 00:19 ]

2009-1-6 00:14
查看资料  发短消息 网志   编辑帖子  回复  引用回复
linee
初级用户





积分 94
发帖 49
注册 2008-12-14
状态 离线
『第 7 楼』:  



  Quote:
Originally posted by tireless at 2009-1-6 00:14:
执行 set /p str=<test.txt,得到的 str 的值为 1023 个字符。

[ Last edited by tireless on 2009-1-6 at 00:19 ]

用for能取到8184个字符。

2009-1-6 12:06
查看资料  发短消息 网志   编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 8 楼』:  要不用P调用下面的VBS替换;为回车

Dim objFSO,objFile
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile("test.txt")
strall = objFile.ReadAll
objFile.Close

strall = Replace(strall,";",vbCrLf)



S smile 微笑,L love 爱,O optimism 乐观,R relax 放松,E enthusiasm 热情...Slore
2009-1-6 12:21
查看资料  发短消息 网志   编辑帖子  回复  引用回复
netbenton
银牌会员

批处理编程迷


积分 1916
发帖 752
注册 2008-12-28
来自 广西
状态 离线
『第 9 楼』:  用debug实现了

@echo on&setlocal enabledelayedexpansion
goto :skip
f 90 l17 50 51 56 57 BF 00 01 89 FE AC 3C 3B 75 02 B0 0A AA E2 F6 5F 5E 59 58
f a7 l4 90
t=90
g a8
w
q

:skip
copy test.txt aaa /y
debug aaa <%~nx0
rem 上面,以 ; 号为分隔符将数据分行

cd.>rus.txt
for /f "tokens=1-3,*" %%a in (aaa) do (
        set aa=%%d
        set aa=!aa:"=`!
        for /f "tokens=1-4 delims=`," %%i in ("!aa!") do (

rem ****aaa
        set jj=%%j
        set jj=!jj: =`!
rem ****aaa 此段用来处理字符串内的空格

        set "_%%k=!_%%k! !jj!"
        )
)
rem 以上,读取数据并分类存入变量


for /f "tokens=1,*" %%a in ('set _') do (
        set aa=%%a
        set aa=!aa:~1,-1!
        echo ***** !aa! 类 *****>>rus.txt
        for %%i in (%%b) do (set ii=%%i&set ii=!ii:`= !&echo !ii! >>rus.txt)
        echo **** end !aa! ****>>rus.txt
        echo.>>rus.txt
)
rem 将分类好的变量整理,写入文本文件

pause

[ Last edited by netbenton on 2009-1-17 at 03:22 ]



精简
[你的+我的+他的]=>[大家的]    个人网志   
2009-1-17 03:18
查看资料  发送邮件  发短消息 网志  OICQ (37659560)  编辑帖子  回复  引用回复
knoppix7
银牌会员





积分 1287
发帖 634
注册 2007-5-2
来自 cmd.exe
状态 离线
『第 10 楼』:  

Debug的话..
碰到大于64K的文档就....

建议学下gawk..

2009-1-17 21:19
查看资料  发短消息 网志   编辑帖子  回复  引用回复
netbenton
银牌会员

批处理编程迷


积分 1916
发帖 752
注册 2008-12-28
来自 广西
状态 离线
『第 11 楼』:  

谢谢,gawk是很值得学习
但debug应该不算第三方工具吧
debug 在500k以内还是可以处理的,只是汇编代码还要增加

[ Last edited by netbenton on 2009-1-18 at 00:14 ]



精简
[你的+我的+他的]=>[大家的]    个人网志   
2009-1-18 00:11
查看资料  发送邮件  发短消息 网志  OICQ (37659560)  编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: