标题: 请教, 如何批量删除特定字符后的换行符?
[打印本页]
作者: 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吗?
而且
Quote: |
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
Quote: |
Originally posted by wudixin96 at 2007-9-24 02:37 PM:
[code]@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
Quote: |
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 ]