Board logo

标题: 如何用其他文本内容覆盖某一文本指定段落的内容 [打印本页]

作者: synn2006     时间: 2006-10-28 03:00    标题: 如何用其他文本内容覆盖某一文本指定段落的内容


──────────────── 版务记录 ────────────────
执行:namejm
原标题:txt文本内容处理问题
修改后标题:如何用其他文本内容覆盖某一文本指定段落的内容
说明:因原标题过于模糊,不便于论坛的搜索和管理,在本提示发表三日之后,
  楼主尚未更改标题,现由本人强制修改标题,并扣除楼主2点积分。
──────────────── 版务记录 ────────────────


有a.txt和b.txt两个文件(内容纯属虚构,但足以表达我的意思):
a.txt内容如下:
[date]:
monday
[name]:
yang li
wang yu
shan liang
[thing]:
meeting
study

b.txt的内容如下:
zhou zhuo
tian li
shang xiao nan
sun chao

能不能用一个bat实现如下功能:
每次先删除a.txt中[name]:后面的所有人名,然后把b.txt中的人名内容加到其中,使其变成如下显示:
a.txt:
[date]:
monday
[name]:
zhou zhuo
tian li
shang xiao nan
sun chao
[thing]:
meeting
study

以后b中的内容可能总是会变,我只是想一执行bat,就把它们都导入a.txt中的name 后面。
如果bat实现不了这种操作,能不能告诉我用vbs怎么编写?
另外还有一个问题,如何在批处理文件中启动执行一个vbs呢?

期待大家的回答,thanks in advance!!!!!!!!!!!!!!!!!!!!!

[ Last edited by namejm on 2007-1-25 at 01:00 PM ]
作者: 无奈何     时间: 2006-10-28 04:34
试试这个命令,写在一行有点长。
sed -e "/\[name\]:/,/\[.*\]:/{/^ *[^[]/d}" -e "/\[name\]:/rb.txt" a.txt
sed 下载地址:http://www.student.northpark.edu/pemente/sed/gsed407x.zip
作者: 不得不爱     时间: 2006-10-28 04:45
sed: -e expression #1, char 2: Unterminated address regex
这个是什么意思?
作者: lxmxn     时间: 2006-10-28 04:55

  这个是 sed 命令的错误提示。是语法错误了吧。。

作者: 不得不爱     时间: 2006-10-28 04:55
SED这个命令功能不错
作者: 不得不爱     时间: 2006-10-28 04:56
我是打的SED/?得到的
作者: 无奈何     时间: 2006-10-28 04:57
Re qwe1234567
这是错误提示,老兄换个高版本的再试一下,把二楼的链接下下来。
作者: lxmxn     时间: 2006-10-28 05:00

  要查看帮助还要这样打才行:"sed -h"

作者: 无奈何     时间: 2006-10-28 05:16
一会儿好几贴了,没有看到你们先前的回复。我晕,我以为用老的版本运行出现的错误提示呢。不过老的版本 sed 302 运行确实有问题,得小改动一下。

  Quote:
sed -e "/\[name\]:/,/\[.*\]:/{/^ *[^[]/d;}" -e "/\[name\]:/rb.txt" a.txt


作者: redtek     时间: 2006-10-28 05:17
这个太强大了,欣赏~:)
作者: namejm     时间: 2006-10-28 05:50
  如果非得用批处理来解决不可的话,可以试试下面的代码(如果a.txt中的行数量十分巨大的话,速度将会比较慢):
@echo off
cd.>test.txt
for /f "tokens=1* delims=:" %%i in ('findstr /n . a.txt') do (
    if not "%%j"=="[name]:" (>>test.txt echo %%j) else (
        set line=%%i&goto insert
    )
)

:insert
>>test.txt echo [name]:
>>test.txt type b.txt
>>test.txt echo.

set flag=1
for /f "skip=%line% delims=" %%i in (a.txt) do (
    if "%%i"=="[thing]:" set flag=
    if not defined flag >>test.txt echo %%i
   
    )
)
start test.txt
[ Last edited by namejm on 2007-1-25 at 12:54 PM ]
作者: synn2006     时间: 2006-10-29 23:07
谢谢大家的帮助,我知道啦~~~