Board logo

标题: [文本处理] 为什么这段代码处理稍大一点的文本就无法执行了 [打印本页]

作者: lbailian    时间: 2012-5-5 10:30     标题: 为什么这段代码处理稍大一点的文本就无法执行了

本帖最后由 lbailian 于 2012-5-5 12:00 编辑

@echo off
setlocal enabledelayedexpansion
for /f "tokens=*" %%i in ('dir/b/a-d *.txt') do (
set s=
(for /f "tokens=*" %%j in ('type "%%i"') do (
if "!s!" neq "" echo !s!
set s=%%j))>temp.txt
echo BBBBBBB>>temp.txt
move /y temp.txt "%%i")

以上就是代码,3M+的文本都无法处理了,要怎么修改代码,让它可以处理稍大一点的文本,最好能处理将近10M的文本~
要处理的文本有很多,代码的作用是替换掉文本最后一行的内容~
作者: yangfengoo    时间: 2012-5-5 10:53

'type "%%i"'改成"%%~i"
作者: neorobin    时间: 2012-5-5 11:22

回复 1# lbailian

请问具体想达到什么样的处理目的.
简单测试了一下, 对有换行结尾的文件原样的没变,
而没有换行结尾的文件就被截去最后一行, 而替换成 BBBBBBB, 并以换行结尾
不知楼主的意图是否如此?
作者: lbailian    时间: 2012-5-5 11:39

回复 2# yangfengoo

我只要修改最后一行的文本~
作者: lbailian    时间: 2012-5-5 11:40

回复 3# neorobin

就是把文本的最后一行内容替换成BBBBBBB
作者: gawk    时间: 2012-5-5 11:49

回复 5# lbailian
  1. sed -i "$s/.*/BBBBBBB/" a.txt
复制代码

作者: poter    时间: 2012-5-5 13:58

这段代码运行起来是没什么问题的,利用空值和条件判断,让文本输出延后了一行

至于不能读取三兆以上的文本,可以试试把type取消掉,因为它本来就没有存在的必要
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "tokens=*" %%i in ('dir/b *.txt') do (
  4. set s=
  5. for /f "tokens=*" %%j in (%%i) do (
  6. if "!s!" neq "" echo !s!>>temp.txt
  7. set s=%%j
  8. )
  9. echo BBBBBBB>>temp.txt
  10. move /y temp.txt "%%i")
  11. set s=
复制代码





欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2