标题: [已结]请教四个txt问题 删除某行 替换 插入
[打印本页]
作者: 123qaz
时间: 2008-11-19 04:04
标题: [已结]请教四个txt问题 删除某行 替换 插入
比如我有一批学生的txt
张三.txt
李四.txt
王二.txt
其中每一个都有一行为 "该同学的名字为**"
现在我用处理将姓名改成了学号
生成的文件为
101.txt
102.txt
103.txt
问题一
如何把所有txt中带有"该同学的名字为**"的一行删除
问题二
在每个txt最后一行加入"该同学的学号为**"
使101.txt 最后一行为 "该同学为101号"
使102.txt 最后一行为 "该同学为102号"
使103.txt 最后一行为 "该同学为103号"
(注:以前输入的txt,有的最后一行是一个回车,有的txt最后一行是空了一行还有一个回车,有的txt最后一行是有用的内容,但还没回车,也就是输入完,就直接保存了)
问题3
如何在第一行插入一行
比如在每个txt第一行前插入"市一中113班"
问题4
如要把"市一中113班"”插在指定的行,比如第3行呢
谢谢各位高手了,我在工作中遇到的一个问题,请大家帮忙分别解答
再次感谢
如果有我没表达清楚的地方 联系qq56156879
[
Last edited by HAT on 2008-11-21 at 10:21 ]
作者: huahua0919
时间: 2008-11-19 05:37
好像无法知道学号从哪里来?
作者: huahua0919
时间: 2008-11-19 07:25
由于你没提供完整信息,就按照数字顺序作为学号
@echo off&setlocal enabledelayedexpansion
set /p insert=请输入要插"市一中113班"的行:
set n=100
for /f "delims=" %%i in ('dir/b *.txt') do (
set /a n+=1
set BeginName=%%i
for /f "delims=" %%a in ('findstr /iv "该同学的名字为" !BeginName!') do (
set /a m+=1
if %insert% neq !m! (echo %%a>>!n!.txt) else (echo 市一中113班 >>!n!.txt)
)
echo.>>!n!.txt
echo 该同学为!n!号>>!n!.txt
set m=0
)
作者: 123qaz
时间: 2008-11-19 22:44
谢谢楼上朋友,是我没说清楚,
我的每个 txt前的数字就是这个学生的学号,所以不一定是100开始
比如 205.txt 则 最后加入一行 该同学为205号
请再帮一下忙
作者: 123qaz
时间: 2008-11-19 23:19
还有一个问题是
我电脑里好几个目录,里面的文件如
张三.avi 张三.txt
李四.avi 李四.txt
王二.avi 王二.txt
......
每个txt记录了同名的视频文件的介绍
现在我打算把这些都按学号来排,从100号开始,比如上面的6个文件都改名
张三.avi 改为 101.avi 张三.txt 改为 101.txt
李四.rm 改为102.rm 李四.txt改为102.txt
王二.dat 改为 103.dat 王二.txt改为103.txt
............
第二步,查找 所有这些txt里面以前的记录改一下
凡是带有“该生姓名为”关键字的一行前面加"//"
如101.txt里“该生姓名为张三” 变为 "//该生姓名为张三"
第三步在101.txt 里最后加一行 "该生的作品为 101.avi"
102.txt里最后加一行 "该生作品为102.rm"
103.txt 里最后加一行 "该生作品为103.dat"
每四步,每个txt里第一行加一行 "市一中113班"
作者: huahua0919
时间: 2008-11-19 23:41
问题好像还是没描述清楚,第一个问题中的,每个TXT文件名字是不由数字和汉字组成,形如 121张三.txt 的结构,然后提取121作为学号?还有学号的位数是不是固定长度(都是3位?),
你的第二个问题中的第三步是不是只要101.txt 102.xt 103.txt 在最后一行加上你所说的特定行,其他的文本文件中都不勇加这样的信息?
作者: 26933062
时间: 2008-11-20 21:29
回答你 5 楼的问题
未测试。。。
1、该代码会删除原文件,注意备份。!!!
2、源文件中“该生姓名为”这几个字的左边不能有空格,否则会判断错误。。
3、会忽略源文件中的空行。
@echo off&setlocal enabledelayedexpansion
for /f "delims=" %%a in ('dir/b *.avi *.rm *.dat') do set "%%~na=%%~xa"
set /a n=100
for /f "delims=" %%a in ('dir/b *.txt') do (
set /a n+=1
>"%%~na_tmp.txt" echo 市一中113班
for /f "usebackq delims=" %%b in ("%%a") do (
set "str=%%b"
if "!str:~0,5"=="该生姓名为" (
>>"%%~na_tmp.txt" echo //%%b
) else (>>"%%~na_tmp.txt" echo %%b)
)
>>"%%~na_tmp.txt" echo 该生的作品为 %%~na!%%~na!
ren "%%~na_tmp.txt" "!n!.txt"
del /q "%%a" 2>nul
)
pause
作者: 26933062
时间: 2008-11-20 21:38
汗,看错题目了,没注意 视频文件也要改名。。。
作者: 123qaz
时间: 2008-11-20 21:56
谢谢8楼
作者: huahua0919
时间: 2008-11-20 23:02
@echo off&setlocal enabledelayedexpansion
set n=20000
set m=0
set /p insertLine=输入要插入数据的行号:
set /p insertData=输入要插入的数据,系统会自动将数据插入到指定的行:
for /f "delims=" %%i in ('dir/s/b/a-d') do (
set Video=%%i
set Video_x=%%~xi
set Video_n=%%~ni
if /i not "!Video_x!"==".KSC" (
if /i not "!Video_x!"==".bat" (
set/a n+=1
for /f "delims=" %%a in ('type !Video_n!.KSC') do (
set ClassInner=%%a
set /a m+=1
if "!ClassInner:~,19!"=="karaoke.CommonVideo" (>>!n!.KSC echo karaoke.CommonVideo := '!n!!Video_x!';)
if %insertLine% neq !m! (>>!n!.KSC echo %%a) else (>>!n!.KSC echo %insertData% )
)
set m=0
ren "%%i" "!n!!Video_x!"
del !Video_n!.KSC /q >nul 2>nul
)
)
)
作者: 123qaz
时间: 2008-11-20 23:03
先谢谢十楼了
作者: 123qaz
时间: 2008-11-21 00:26
huahua0919
太厉害了,完美解决了
作者: pigpigs
时间: 2008-11-21 08:45
高手,看了半天没看明白咋回事儿。
作者: 123qaz
时间: 2008-11-21 22:34
这论坛里高手也多,好心朋友也多,淘宝收费50的人用了一天没编好的,10楼的朋友用两个晚上就编好了,我说帮他交点电话费,他也不要,几个功能就短短几行代码就成功了,真是高兴,又感激,对论坛的高手一并谢谢了,你们的付出,对菜鸟是很大的帮助