中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-08-11 06:17
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 如何提取超长行指定字符串 查看 1,215 回复 10
楼 主 如何提取超长行指定字符串 发表于 2009-01-05 15:59 ·  中国 福建 福州 连江县 联通
高级用户
★★
积分 581
发帖 277
注册 2006-12-23 05:10
19年会员
UID 74328
性别 男
状态 离线
有一文本(飞信手机型号列表)存在超长行,我想提取其中指定的字符串,用P能实现吗?
文本部分示例如下,具体可看附件
批处理一:提取每一对括号内的前两个引号中的内容
1680C 1
310 3
2610 1
以此类推
批处理二:以每一对括号内的第二个引号中的内容为分类标志,提取相应的括号内的第一个引号中的内容
如示例中要提取分类标志为1的所有相应数值,则有
1680C
2610
等等,以此类推

mobiletype = new Array("1680C","1","309");mobiletype = new Array("310","3","14");mobiletype = new Array("2610","1","103");......



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



[ Last edited by suntb on 2009-1-5 at 16:48 ]
附件
test.rar (2.94 KiB, 下载次数: 13)
2 发表于 2009-01-05 16:01 ·  中国 福建 福州 连江县 联通
高级用户
★★
积分 581
发帖 277
注册 2006-12-23 05:10
19年会员
UID 74328
性别 男
状态 离线
如果不用P的话怎么办?我还是喜欢使用P处理,不过P用来处理类似的超长行实在头痛啊
3 发表于 2009-01-05 16:39 ·  中国 贵州 安顺 电信
初级用户
积分 94
发帖 49
注册 2008-12-14 20:47
17年会员
UID 133884
性别 男
状态 离线
先把超长行变短是不是好处理点呢?
mobiletype = new Array("1680C","1","309")
mobiletype = new Array("2610","1","103")
mobiletype = new Array("2630","1","200")
mobiletype = new Array("2760","1","201")
mobiletype = new Array("310","3","14")
mobiletype = new Array("3109c","1","296")
mobiletype = new Array("3110C","1","153")
mobiletype = new Array("3220","1","102")
mobiletype = new Array("3230","1","2")
mobiletype = new Array("3250","1","168")
……
4 发表于 2009-01-05 16:45 ·  中国 福建 福州 连江县 联通
高级用户
★★
积分 581
发帖 277
注册 2006-12-23 05:10
19年会员
UID 74328
性别 男
状态 离线
Originally posted by linee at 2009-1-5 16:39:
先把超长行变短是不是好处理点呢?

如果能将超长行变短,其他的问题我自己可以解决了
问题是怎么通过P方式变短?
5 发表于 2009-01-05 19:56 ·  中国 贵州 安顺 电信
初级用户
积分 94
发帖 49
注册 2008-12-14 20:47
17年会员
UID 133884
性别 男
状态 离线
超长行纯P可能读不出来,可能要借助第三方工具。

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

[ Last edited by linee on 2009-1-5 at 21:00 ]
6 发表于 2009-01-06 00:14 ·  中国 江西 赣州 安远县 电信
银牌会员
★★★★
积分 2,025
发帖 1,122
注册 2007-09-05 20:15
18年会员
UID 96653
性别 男
状态 离线
执行 set /p str=<test.txt,得到的 str 的值为 1023 个字符。

[ Last edited by tireless on 2009-1-6 at 00:19 ]
7 发表于 2009-01-06 12:06 ·  中国 贵州 安顺 电信
初级用户
积分 94
发帖 49
注册 2008-12-14 20:47
17年会员
UID 133884
性别 男
状态 离线
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个字符。
8 要不用P调用下面的VBS替换;为回车 发表于 2009-01-06 12:21 ·  中国 陕西 西安 电信
铂金会员
★★★★
积分 5,212
发帖 2,478
注册 2007-02-08 23:39
19年会员
UID 79003
性别 男
状态 离线
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
9 用debug实现了 发表于 2009-01-17 03:18 ·  中国 广东 东莞 电信
银牌会员
★★★
批处理编程迷
积分 1,916
发帖 752
注册 2008-12-28 04:30
17年会员
UID 135147
性别 男
来自 广西
状态 离线
@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 ]
精简
=> 个人网志
10 发表于 2009-01-17 21:19 ·  中国 北京 联通
银牌会员
★★★
积分 1,287
发帖 634
注册 2007-05-02 15:06
19年会员
UID 87277
性别 男
来自 cmd.exe
状态 离线
Debug的话..
碰到大于64K的文档就....

建议学下gawk..
11 发表于 2009-01-18 00:11 ·  中国 广东 东莞 电信
银牌会员
★★★
批处理编程迷
积分 1,916
发帖 752
注册 2008-12-28 04:30
17年会员
UID 135147
性别 男
来自 广西
状态 离线
谢谢,gawk是很值得学习
但debug应该不算第三方工具吧
debug 在500k以内还是可以处理的,只是汇编代码还要增加

[ Last edited by netbenton on 2009-1-18 at 00:14 ]
精简
=> 个人网志
论坛跳转: