Board logo

标题: 请教, 如何批量删除特定字符后的换行符? [打印本页]

作者: justine     时间: 2007-9-24 13:44    标题: 请教, 如何批量删除特定字符后的换行符?
想批量处理单个文件下特定字符后的换行符, 文件比较长!
文件名: aaa.txt
格 式: 2007-9-12;
9,972.19
2007-9-13;
9,762.19
2007-9-14;
9,372.19

如何才能自动删除 ; 后的换行符? 完成后保存为另一份文件,如 bbb.txt

文件比较长, 一般超过6万行, 格式如上, 没有其它多余字符...
请大家指教!!

作者: wudixin96     时间: 2007-9-24 14:12
意思是把两行合并成一行吧?

作者: justine     时间: 2007-9-24 14:18
是的, 准确的说是隔行复制...

作者: wudixin96     时间: 2007-9-24 14:21
2007-9-12;
9,972.19
2007-9-13;
9,762.19
2007-9-14;
9,372.19

========================================
2007-9-12;9,972.19
2007-9-13; 9,762.19
2007-9-14; 9,372.19


改后是这样的格式吗?

作者: justine     时间: 2007-9-24 14:23
是的, 可以做到吗?

作者: wudixin96     时间: 2007-9-24 14:29
用sed

@echo off
sed "$!N;s/\n//" 2.txt
pause

作者: justine     时间: 2007-9-24 14:31
不好意思, 我完全是个新手, 可以用bat吗?
而且
Originally posted by wudixin96 at 2007-9-24 02:29 PM:
用sed

@echo off
sed "$!N;s/\n//" 2.txt
pause

好像没有指定文件名和路径??

作者: wudixin96     时间: 2007-9-24 14:37
@echo off
setlocal enabledelayedexpansion
for /f "tokens=1* delims=:" %%i in ('findstr /n .* 2.txt') do (
set /a num=%%i%%2
if not !num!==0 (set str=%%j) else (echo !str!%%j)
)
pause


试试这个吧

作者: justine     时间: 2007-9-24 14:43
执行了, 可是没有看到保存的文件...

可以直接覆盖原文件吗?

作者: wudixin96     时间: 2007-9-24 14:45
只能先导出到临时文件,再删除原文件,然后改临时文件名为原文件名

作者: justine     时间: 2007-9-24 14:51
第二个写法应该是直接合并两行, 我还是希望只删除 ; 后的换行符, 然后覆盖原文件,这样文本增加新的内容 (格式同修改前)也不用重复执行...

作者: justine     时间: 2007-9-24 14:52
还是很多谢 wudixin96 !

作者: yoyodos     时间: 2007-9-24 17:28
Originally posted by wudixin96 at 2007-9-24 02:37 PM:
@echo off
setlocal enabledelayedexpansion
for /f "tokens=1* delims=:" %%i in ('findstr /n .* 2.txt') do (
set /a num=%%i%%2
if not !num!==0 (set str=%%j) else (echo !str!%%j ...

;)学习了

作者: yoyodos     时间: 2007-9-24 19:55

@echo off
setlocal enabledelayedexpansion
for /f "tokens=1* delims=:" %%i in ('findstr /n .* 2.txt') do (
set /a n=%%i%%2
set/a l=0
if not !n!==0 (
set str=!str!%%j
) else (
echo !str!%%j
set/a l=1
)
if !l!==1 set str=
)
pause


适用性好些,学习下

作者: terse     时间: 2007-9-24 20:10
发一个版主的学习
@echo off
set num=0
setlocal enabledelayedexpansion
for /f "delims=" %%i in (aaa.txt) do (
set /a num+=1
set str=!str! %%i
if !num! equ 2 echo!str! && set num=0 & set str=
)
pause

作者: justine     时间: 2007-9-25 10:15
为什么大家的写法都是不能保存为另一文件呢?

作者: terse     时间: 2007-9-25 10:52
Originally posted by justine at 2007-9-25 10:15:
为什么大家的写法都是不能保存为另一文件呢?

@echo off
set num=0
setlocal enabledelayedexpansion
for /f "delims=" %%i in (aaa.txt) do (
set /a num+=1
set str=!str! %%i
if !num! equ 2 echo!str!>>bbb.txt && set num=0 & set str=
)
pause

作者: justine     时间: 2007-9-25 11:08
太好了, 多谢terse!

如果已经有 bbb.txt, 是否直接覆盖呢? 这个写法对 aaa.txt 文件的长度有要求吗? 我的文件比较长, 超过6万行... ...

另外, 如果希望 bat 在后台运行, 不要显示窗口, 可以吗?

作者: terse     时间: 2007-9-25 12:36
用VBS吧
DIM objShell
set objShell=wscript.createObject("wscript.shell")
iReturn=objShell.Run("cmd.exe /caa.bat", 0, TRUE)

aa.bat 内容:
@echo off
set num=0
setlocal enabledelayedexpansion
for /f "delims=" %%i in (aaa.txt) do (
set /a num+=1
set str=!str!%%i
set str=!str: =!
if !num! equ 2 echo !str!>>bbb.txt && set num=0 & set str=
)
ren aaa.txt aaabak.txt
ren bbb.txt aaa.txt

Last edited by terse on 2007-9-25 at 12:54 PM ]