Board logo

标题: 每两行合并成一行 [打印本页]

作者: wydos     时间: 2006-12-10 23:24    标题: 每两行合并成一行

@echo off
setlocal enabledelayedexpansion
for /f "tokens=*" %%i in (%*) do (
set /a n+=1
set !n!line=%%i
if !n! equ 2 (
echo !1line! !2line!>>result.txt
set /a n=0
)
)
endlocal

可以依次类推把每n行合并成一行。

[ Last edited by wydos on 2006-12-11 at 01:58 AM ]
作者: lotus516     时间: 2006-12-11 00:11
这个也叫原创,相似的内容好久前就有了!!
http://www.cn-dos.net/forum/view ... ghlight=%2Blotus516
作者: wydos     时间: 2006-12-11 00:58
真是惭愧呀!!!
不过这是我昨天处理文本时想出来的,还不知道有类似的贴:
http://www.cn-dos.net/forum/view ... ghlight=%2Blotus516
搜贴时关键词没用好!
惭愧!!
惭愧!!
还请版主把它删掉!
作者: namejm     时间: 2006-12-11 01:02
  其实没必要删除主题,把 [原创] 字样取消,然后再把代码的功能增强一点(如何增强请自己想,我还没想到该如何增强^_^),这样就不会和以前的内容重复了。
作者: ccwan     时间: 2006-12-11 01:03
不必删掉,代码又没有指定版权,难道写出来绝对不能与别人相似吗?
只要是自己努力学习的结果,何必在乎这些呢?
作者: wydos     时间: 2006-12-11 02:11
谢谢 5 楼的鼓励!
关于代码的功能增强,感觉没有思路
作者: wydos     时间: 2006-12-11 02:34
改了一下:
把两行合并和n行合并统一
@echo off
setlocal enabledelayedexpansion
echo 请问你要每几行合并成一行,请输入数字,回车确定!
@set /p m=
for /f "tokens=*" %%i in (%*) do (
set /a n+=1
set line=!line!%%i
if !n! equ !m! (
echo !line!>>result.txt
set line=
set /a n=0
)
)
endlocal
作者: ccwan     时间: 2006-12-11 02:58
我试了一下,好像最后不足几行时不能合并甚至不显示。
例如每两行合并,若为奇数,最后一行result.txt中没有,
即:每n行合并,若总行数不是n的整数倍数,则余下的行里的内容不被合并显示。

不知是否只有我的机子这样。
作者: wydos     时间: 2006-12-11 04:37
情况确实如ccwan所说的。
应该在代码中加个求余的判断

改了一下:
@echo off
setlocal enabledelayedexpansion
echo 请问你要每几行合并成一行,请输入数字,回车确定!
@set /p m=
for /f "tokens=*" %%i in (%*) do (
set /a hangn+=1
set /a n+=1
set line=!line!%%i
if !n! equ !m! (
echo !line!>>result.txt
set line=
set /a n=0
)
)
rem 以下代码用于处理剩下的行
set /a t=!hangn!%%!m!
if !t! equ 0 goto end
echo !line!>>result.txt
:end
endlocal
不知大家有没有更好的代码

[ Last edited by wydos on 2006-12-11 at 04:56 AM ]
作者: ccwan     时间: 2006-12-11 06:34
试过了,成功。
作者: 3742668     时间: 2006-12-11 07:05

@echo off
    setlocal enabledelayedexpansion
rem 下面的文件名若包含空格注意加引号
    set file=a.txt
    for /f "delims=: tokens=1*" %%i in ('findstr /n .* %file%') do set num=%%i && set "%%i=%%j"
   
    echo 显示全部:
    for /l %%i in (1,1,%num%) do echo,!%%i!
    pause

    echo 显示单数行:
    for /l %%i in (1,2,%num%) do echo,!%%i!
    pause

    echo 显示双数行:
    set "num_ex="
    set /a num_ex=%num% + 1
    for /l %%i in (2,2,%num_ex%) do echo,!%%i!
    pause

    echo 每两行合并:
    set str=
    for /l %%i in (1,1,%num%) do (
        if defined str (echo,!str!!%%i!&&set "str="
                       ) else (
                               set "str=!%%i!"
                               )
    )
    echo,!str! && set "str="
    pause

    echo 显示前10行:
    for /l %%i in (1,1,10) do if defined %%i echo,!%%i!
    pause
exit /b 0
因为处理字符的工作都是用vbs来完成,所以上面的代码未测试,只为提供思路。
作者: yardian     时间: 2006-12-12 02:06


  Quote:
Originally posted by lotus516 at 2006-12-11 12:11 AM:
这个也叫原创,相似的内容好久前就有了!!
http://www.cn-dos.net/forum/view ... ghlight=%2Blotus516

我感觉这句话有问题,只要不是抄袭别人的,自己做出来的,都是应该是原创吧?好像原创并没规定不可以相同吧?
纯属灌水,老兄别在意啊!!!!