中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
作者:
标题: for按规定提取文本 上一主题 | 下一主题
26933062
银牌会员





积分 2268
发帖 879
注册 2006-12-19
状态 离线
『楼 主』:  for按规定提取文本

实在是不知道怎么写标题了,
各位若是没好答案,帮忙想想标题也行.呵呵...

言归正传
现有a.txt和b.txt文档,里面内容(即:行数)不确定.
要求建立c.txt内容是a.txt和b.txt的全部内容
并且规律如下
先是a.txt的头5行,再是b.txt的头5行,然后又是a.txt的5行.......依此类推.........
反正就是一个5行的来,直到其中一个没有了或不足5行,就把剩下的全部写入.
不知这样说,大家听明白没???
a.txt和b.txt的行数不一定是5的倍数哦.

如a.txt内容
1
2
3
4
5
11
12
13
14
15
21
22
b.txt内容
6
7
8
9
10
16
17
18
19
20
23
24
25
26
27
要求c.txt的内容是
从1---27


[ Last edited by 26933062 on 2007-9-1 at 09:25 AM ]



致精致简!
2007-9-1 09:23
查看资料  发短消息 网志   编辑帖子  回复  引用回复
xxi
初级用户





积分 48
发帖 24
注册 2007-8-31
状态 离线
『第 2 楼』:  

请先考虑,for的运行机制

2007-9-1 09:33
查看资料  发短消息 网志  OICQ (327869085)  编辑帖子  回复  引用回复
ccwan
金牌会员




积分 2725
发帖 1160
注册 2006-9-23
来自 河北廊坊
状态 离线
『第 3 楼』:  

Sample Text

[ Last edited by ccwan on 2007-9-1 at 02:11 PM ]



三人行,必有吾师焉。   学然后知不足,教然后知困,然后能自强也。
2007-9-1 11:57
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
knoppix7
银牌会员





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

i didn't say anything

[ Last edited by knoppix7 on 2007-9-1 at 02:02 PM ]

2007-9-1 13:26
查看资料  发短消息 网志   编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 5 楼』:  



  Quote:
Originally posted by knoppix7 at 2007-9-1 13:26:
@echo off
type a.txt>>e.txt
type b.txt>>e.txt
findstr /v "2. 1." e.txt>>c.txt
findstr "1." e.txt|sort /+2>>c.txt
findstr "2." e.txt|sort / ...

a:
sdfsdf
sdfsd
dfsd
fsdf
s
dfs
df
sdf
s
df
sd
f
sd
f
sdf
s
df
sdf
dsf
sdf
sd
f
b:
123124
1
23
123
2
3
12
4
213
12
123
4
23
4
23
423
423
你的C和E结果都是type了罢了……

你是按照1,2,3……那种数字算的吧?那你写到30看看问题就有了……
他用数字是形容下。。。

2007-9-1 13:44
查看资料  发短消息 网志   编辑帖子  回复  引用回复
knoppix7
银牌会员





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

没弄懂LZ德意思。。。。。
当我什么都没说吧。

2007-9-1 13:58
查看资料  发短消息 网志   编辑帖子  回复  引用回复
26933062
银牌会员





积分 2268
发帖 879
注册 2006-12-19
状态 离线
『第 7 楼』:  

大家难道没看懂我的意思吗?
我的意思是
先读取a,txt的前5行,再读取b.txt的前5行
然后又读取a,txt的5行(即:第6-10行),再读取b.txt的5行(即:第6-10行)
再接着读取a.txt的5行(即:第11-15行),再读取b.txt的5行(即:第11-15行)
依此类推。。。
比如:
若a.txt的内容不足5行时,就有几行读几行,最后再把b.txt的内容全部读取。
若是b.txt的内容不足5行时,也是如此。



致精致简!
2007-9-1 16:41
查看资料  发短消息 网志   编辑帖子  回复  引用回复
ccwan
金牌会员




积分 2725
发帖 1160
注册 2006-9-23
来自 河北廊坊
状态 离线
『第 8 楼』:  

我的代码有点复杂,所有想看看各位有什么好的解决方法。既然没人发言,我就抛砖吧。
@echo off
setlocal enabledelayedexpansion
set num=0
for /f "tokens=1 delims=:" %%i in ('findstr /n .* a.txt') do set num_=%%i
for /f "tokens=1 delims=:" %%i in ('findstr /n .* b.txt') do set _num=%%i
if %num_% gtr %_num% (set _num_=%num_%) else (set _num_=%_num%)
:begin
if %num% gtr %_num_% goto :eof
for /f %%a in ('more/e +%num% ^<a.txt') do (
    set/a a+=1
    if !a! leq 5 echo %%a>>c.txt
)
for /f %%i in ('more/e +%num% ^<b.txt') do (
    set/a b+=1
    if !b! leq 5 echo %%i>>c.txt
)
set/a num+=5
set a=0
set b=0
goto :begin
[ Last edited by ccwan on 2007-9-1 at 05:07 PM ]



三人行,必有吾师焉。   学然后知不足,教然后知困,然后能自强也。
2007-9-1 17:05
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
knoppix7
银牌会员





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

想了一下午,发现用的方法==LS的

2007-9-1 17:09
查看资料  发短消息 网志   编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 10 楼』:  

:P
CC果然勤快……

实现当然可以,不过我是懒人嗬一看就是不是简单几句能用P搞定的问题~支持,希望LZ的问题解决。

2007-9-1 17:14
查看资料  发短消息 网志   编辑帖子  回复  引用回复
knoppix7
银牌会员





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

用FOR循环。同时考虑用readline?
http://www.cn-dos.net/forum/viewthread.php?tid=28639&fpage=1

2007-9-1 17:46
查看资料  发短消息 网志   编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 12 楼』:  

FOR循环调用的话……总运行代码不少……这个的文本固定了……

2007-9-1 17:49
查看资料  发短消息 网志   编辑帖子  回复  引用回复
1112yuhua
初级用户





积分 106
发帖 44
注册 2007-6-1
状态 离线
『第 13 楼』:  

把文本文件每五行分割成一个文件,再用copy合并,不知是否可行。

2007-9-2 01:43
查看资料  发送邮件  发短消息 网志  OICQ (463675828)  编辑帖子  回复  引用回复
26933062
银牌会员





积分 2268
发帖 879
注册 2006-12-19
状态 离线
『第 14 楼』:  

多谢 ccwan 的解答,代码可以正常运行,思路也非常好,佩服!!!
不过有一个地方不明白,可以麻烦再解释一下么?
more/e +%num% ^<a.txt
这句中,为什么要^<符号?我试过取消它也可以正常运行,是不是取消以后
会在某种情况下出错?



致精致简!
2007-9-2 12:40
查看资料  发短消息 网志   编辑帖子  回复  引用回复
ccwan
金牌会员




积分 2725
发帖 1160
注册 2006-9-23
来自 河北廊坊
状态 离线
『第 15 楼』:  



  Quote:
Originally posted by 26933062 at 2007-9-2 12:40:
不过有一个地方不明白,可以麻烦再解释一下么?
more/e +%num% ^<a ...

这是转义符号,你在命令行下使用没有它当然可以,但是在批处理中就要注意了。在in集合中是必须使用的。

至于不用<是可以的,只是这样用惯了

[ Last edited by ccwan on 2007-9-2 at 05:33 PM ]



三人行,必有吾师焉。   学然后知不足,教然后知困,然后能自强也。
2007-9-2 17:28
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: