![Board logo](images/default/logo.gif)
标题: [文本处理] [已解决]字符提取 && 文本比较 && 参数引用 [打印本页]
作者: kingboli 时间: 2012-8-31 20:40 标题: [已解决]字符提取 && 文本比较 && 参数引用
本帖最后由 kingboli 于 2012-9-2 16:19 编辑
请教两个程序需同时实现1、2; 或同时实现1、3
1. 提取文本A中每行最后一个“/”后面的字符,并将提取的内容保存到B文本。
2. 比较B文本和C文本的内容,看B中是否含有C文本中某行的内容,如果含有某行内容,则输出D文本中相应行的内容(D和C文本有相同的行数)。
3. 为了向牛牛们学习更多的知识,增加点难度,把“2” 中的内容改为“比较B文本和C文本的内容,看B中是否含有C文本中某行的内容,如果含有某行内容,则将C和D中该行的内容作为参数传给E程序”
如:
A的内容有如下格式(/的个数不确定):
u Dir1/dir2/dir3../a.txt
4849 Dir4/dir5/dir6../b(1.2.3).txt
ddd9 D ir4/dir6/d ir7../c d(1.2.3)fe(234).txt
fe Dir4/dir6/dir3../f f(1 2 3)e(2-3-4).txt
fe Dir4/di r4/dir2../dir..8/你好(中文括号)(英文括号).txt
C的内容为:
c d(1.2.3)fe(234).txt
(1.2.3).txt
a.txt
D的内容:
ddfejbln1
ffex2
ddfefrf3
按照1的要求:
B的内容应为:
a.txt
b(1.2.3).txt
c d(1.2.3)fe(234).txt
f f(1 2 3)e(2-3-4).txt
你好(中文括号)(英文括号).txt
按照2的要求,B和C比较,含有C中第1行的内容,则输出D中第1行的内容,然后发现同时含有C中第3行的内容,则继续输出D中第3行的内容.
最终的输出结果为:
ddfejbln1
ddfefrf3
按照3的要求,B和C比较,含有C中第1行的内容,则传递C和D中第1行的内容给程序E, 并执行E. 然后发现同时含有C中第3行的内容,则传递C和D中第3行的内容给程序E, 并继续执行E.
最终的输出结果为:
E "c d(1.2.3)fe(234).txt" "ddfejbln1"
E "a.txt" "ddfefrf3"
注:参照网友的程序,用如下程序实现第一步,但是遇到含有英文括号和空格的情况就会报错,求解释
for /f "delims=" %%j in (A.txt) do (
for /f "delims=" %%i in ("%%j") do (
set directory=%%i
set fname=
call :separate
)
)
exit 0
:separate
if not "%directory:~-1%"=="/" (
set fname=%directory:~-1%%fname%
set directory=%directory:~0,-1%
goto :separate
) else (
echo %fname% >>B.txt
)
作者: apang 时间: 2012-8-31 22:12
本帖最后由 apang 于 2012-8-31 23:56 编辑
- @echo off
- for /f "delims=" %%a in (a.txt) do set "%%~nxa=1"
- ((for /f "delims=" %%a in (c.txt) do (
- set/p N=
- if defined %%a (
- setlocal enabledelayedexpansion
- echo,!N!&endlocal
- )
- ))<d.txt)>Result.txt
复制代码
作者: kingboli 时间: 2012-8-31 23:47
这个好像不能实现啊。。麻烦您在帮忙看看吧。非常感谢~~
作者: apang 时间: 2012-9-1 00:03
没有生成B.TXT,过渡的
作者: kingboli 时间: 2012-9-1 08:50
回复 4# apang
初学批处理,希望知道为什么我问题里提到的程序,遇到空格和英文括号就不能生成B。 还请牛牛再给一个可以生成B的方法。呵呵。。非常感谢~~
作者: 无知小菜鸟 时间: 2012-9-1 09:20
- @echo off
- for /f "tokens=4 delims=/" %%a in (a.txt) do echo %%a>>B.txt
- pause
-
复制代码
解决第一个问题的办法
作者: kingboli 时间: 2012-9-1 09:35
回复 6# 无知小菜鸟
/ 有多少个是不确定的。。用这个好像不行吧~~
作者: 无知小菜鸟 时间: 2012-9-1 10:21
回复 7# kingboli
呵呵,确实只能解决确定的/ , 是我死板了,不过题目说明白点,那我再想象,我也是新手
作者: apang 时间: 2012-9-1 10:56
回复 5# kingboli
顶楼的例子,貌似要将set等号两边用引号包围,如:set "directory=%%j"- @echo off
- (for /f "delims=" %%a in (a.txt) do (
- echo,%%~nxa
- set "%%~nxa=1"
- ))>b.txt
- ((for /f "delims=" %%a in (c.txt) do (
- set "C=%%a"&set/p D=
- if defined %%a (
- setlocal enabledelayedexpansion
- echo,E "!C!" "!D!"&endlocal
- )
- ))<d.txt)>Result.txt
复制代码
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |