Board logo

标题: 如何在已存在的文件中指定的位置插入数据 [打印本页]

作者: sncffbo     时间: 2005-5-30 00:00    标题: 如何在已存在的文件中指定的位置插入数据

如有一个.txt  文件:内容为:1
                                              2
                                              3
                                              4
                                               5
我如何有dos命令在4的前一行插入一排abc,得到如下:
                                             1
                                              2
                                              3
                                               abc
                                              4
                                              5
请各们高手不惜告诉!  在这先谢各位了!
作者: willsort     时间: 2005-5-30 00:00
Re sncffb  实现此特性的最佳方案是利用文本流处理工具,比较通用的有类C的GAWK,支持正则表达式的SED等,比较简单的有LMOD等,或者利用串替换工具也可以达到类似的效果,比如HEXC\CHANGE等。等然,这些都属于第三方工具,我在彼处的经验不是很多。  如果用纯批处理实现,需要区分是否NT系列环境。如果是,可以利用相对比较简单的FOR文本解析来实现特有的功能,即判断到指定行(用关键字或者行号)时,进行特有的操作。如果非NT环境,则需要使用其它一些文本行遍历的技巧,这我在旧贴中曾经多次涉及,你可以以“文件遍历”关键字搜索论坛。
作者: brglng     时间: 2005-6-2 00:00
可以用Find或者xfind之类的。哈哈,最简单的就是重新写一遍
作者: sncffbo     时间: 2005-6-2 00:00
我好象在哪里看见过这种用法。不象上面两位老兄说的那样,那样麻烦。只是有一个简单的 >> 解决了问题,不过还要在其前面加一句什么字段。不记得了。具体在那看到不记得,我确认是往autoexe , config ,msdos 里插入一句,但前一行好象一字段是boot .望各们高手们知道就写下来,共同发展dos之路,
作者: willsort     时间: 2005-6-2 00:00
Re sncffbo  简单的使用>>,只能在文本尾部添加串,而不会插入串。  实现不用第三方工具在特定地址或特征字符串后插入串仍然是比较复杂的,三楼提到的find可以用,但是需要较多的辅助语句,我写的大部分文本遍历算法中就都用到了find。
作者: smileseeker     时间: 2005-6-4 00:00
set a=0set b=0for /f %%i in (1.txt) do if "%%i"=="4" goto :after4 else echo %%i >>2.txt && set /a a=a+1:after4echo add_string >>2.txtfor /f %%i in (1.txt) do set /a b=b+1 && if !b! GTR %a% echo %%i >>2.txt不知道这种思路可不可以!b!好像要延缓环境变量在黑窗体中是cmd/vn在批处理中不知道怎么用请高手指点
作者: willsort     时间: 2005-6-6 00:00
Re smileseeker:
::VarDelay.bat - 在批处理中使用延迟变量
::Will Sort - 2005/06/05 - CMD@WinXP
@echo off
if "%1"=="" cmd /v:on /c%0 cmdshell && goto :EOF
:: Run in cmd shell with delayed environment variable expansion
for %%v in (1 2 3 4 5 6 7 8 9) do set ev=%%v && echo !ev!

:: Insert.bat - 在文本文件中的指定行插入一行
:: Will Sort - 2005/06/05 - CMD@WinXP
@echo off
for /f %%t in (1.txt) do echo %%t >>2.txt && if "%%t"=="4" echo insert_string>>2.txt

作者: smileseeker     时间: 2005-6-6 00:00
高手就是高手语句就是精练学了一招