标题: [文本处理] [已解决]批处理怎样获取文本中空行的下一行 [打印本页]
作者: 1270697389 时间: 2014-2-18 13:14 标题: [已解决]批处理怎样获取文本中空行的下一行
本帖最后由 pcl_test 于 2016-8-9 21:10 编辑
1.txt
款到即发的苟富贵
的建设路口附近的时刻
款到即发看电视
的会计法离开的时间发士大夫
点击付款的就是开放式
记得开房间
我要提取空行的下面一行,空行里面连一个空格都没有的,谢谢大家!
作者: DAIC 时间: 2014-2-18 13:41
对于顶楼的数据,你希望得到的结果是什么?
作者: 1270697389 时间: 2014-2-18 13:54
本帖最后由 1270697389 于 2014-2-18 14:48 编辑
回复 2# DAIC
1.txt
款到即发的苟富贵
的建设路口附近的时刻
款到即发看电视
的会计法离开的时间发士大夫
点击付款的就是开放式
记得开房间
处理后的2.txt
的会计法离开的时间发士大夫
点击付款的就是开放式
记得开房间
我用的- @echo off&setlocal enabledelayedexpansion
- set "n="
- for /f %%a in (1.txt) do (
- set a=%%a
- set /a n+=1
- if "!a:~0,1!" == "" (
- set /a r=!n!+1) else (
- if "!n!" == "!r!" echo %%a>>2.txt
- )
- )
- pause
复制代码
我这个不行
作者: DAIC 时间: 2014-2-18 14:39
回复 3# 1270697389
你没有开启变量延迟扩展,怎么可以用感叹号呢
作者: 1270697389 时间: 2014-2-18 14:50
回复 4# DAIC
有变量延迟
作者: DAIC 时间: 2014-2-18 15:11
回复 5# 1270697389 - @echo off
- setlocal enabledelayedexpansion
- set "n="
- for /f %%a in (a.txt) do (
- echo 正在处理:%%a
- echo n的值:!n!
- echo r的值:!r!
- set a=%%a
- set /a n+=1
- if "!a:~0,1!" == "" (
- set /a r=!n!+1
- ) else (
- if "!n!" == "!r!" echo %%a
- )
- )
- pause
复制代码
你这样执行一下,就会发现,这个 for 命令根本没有读取到空行。
作者: 1270697389 时间: 2014-2-18 15:44
回复 1270697389 你这样执行一下,就会发现,这个 for 命令根本没有读取到空行。
DAIC 发表于 2014-2-18 15:11
谢谢你
作者: apang 时间: 2014-2-18 15:50
for /f 读取文本时会忽略空行,可以用findstr,这样试试:- @echo off
- for /f "delims=" %%a in ('findstr /n .* 1.txt') do (
- set "a=%%a"
- setlocal enabledelayedexpansion
- set "a=!a:*:=!" & set "b=!b:*:=!"
- if "!b!"=="" if not "!a!"=="" echo,!a!
- endlocal
- set "b=%%a"
- )
- pause
复制代码
作者: 1270697389 时间: 2014-2-19 07:59
for /f 读取文本时会忽略空行,可以用findstr,这样试试:
apang 发表于 2014-2-18 15:50
你这个代码很好,能解释一下吗,我有点看不懂。谢谢
作者: DAIC 时间: 2014-2-19 08:04
回复 9# 1270697389 - @echo off
- for /f "delims=" %%a in ('findstr /n .* 1.txt') do (
- echo ------------[正在处理]%%a
- set "a=%%a"
- setlocal enabledelayedexpansion
- echo [替换之前]a的值是!a!,b的值是!b!
- set "a=!a:*:=!" & set "b=!b:*:=!"
- echo [替换之后]a的值是!a!,b的值是!b!
- if "!b!"=="" if not "!a!"=="" echo,!a!
- endlocal
- set "b=%%a"
- )
- pause
复制代码
这样执行一下,看看。
作者: 1270697389 时间: 2014-2-19 11:36
回复 1270697389 这样执行一下,看看。
DAIC 发表于 2014-2-19 08:04
学习了,为什么set b=%%a不能放到set a=%%a的下面,谢谢!这类的我有点搞不懂,谢谢!
作者: DAIC 时间: 2014-2-19 12:35
回复 11# 1270697389
变量a保存的是当前行的内容,变量b保存的是上一行的内容。
作者: 1270697389 时间: 2014-2-19 13:12
回复 12# DAIC
哦,谢谢你
作者: 34205 时间: 2015-1-22 21:16
本帖最后由 34205 于 2015-1-22 21:21 编辑
@echo off
Mode con: cols=86 lines=40
:GO
MD temp\
cd temp\
Cls
echo =======说明区========
Echo bat怎样提取空行的下一行
Echo.
echo =======代码区========
:inword
Echo 111111111 >测试A.txt
Echo 246 42236436 >>测试A.txt
Echo 246333333 3333333 >>测试A.txt
echo;>>测试A.txt
Echo 23624 426243723462346 >>测试A.txt
Echo 00000000000>>测试A.txt
:Start
for /f "delims=" %%a in ('findstr /n .* 测试a.txt') do (
echo.
echo ------------[正在处理]%%a .............
echo.
set "a=%%a"
setlocal enabledelayedexpansion
echo [替换之前]a的值是----!a!,b的值是----!b!
Ping -n 1 127.1>nul
set "a=!a:*:=!" & set "b=!b:*:=!"
echo [替换之后]a的值是----!a!,b的值是----!b!
Ping -n 1 127.1>nul
if "!b!"=="" if not "!a!"=="" echo,!a!
endlocal
set "b=%%a"
)
echo =======退出区=======
:Out
echo.
echo 退出.......
Ping -n 30 127.1>nul
exit /b
作者: CrLf 时间: 2015-1-22 23:55
暴力点的办法:- @echo off
- (
- set /p"="
- for /f "delims=" %%a in ('findstr /n .* 1.txt') do (
- set "当前行=%%a"
- set /p "下一行="
- setlocal enabledelayedexpansion
- if "!当前行:*:=!"=="" echo,!下一行!
- endlocal
- )
- )<1.txt
- pause
复制代码
作者: pcl_test 时间: 2016-8-9 21:24
- //&cls&cscript -nologo -e:jscript "%~f0"<"1.txt"&pause&exit
- WSH.echo(WSH.StdIn.ReadAll().match(/\r?\n[ \t]*\r?\n[^\r\n]+/g).join(''))
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |