标题: [文本处理] 批处理怎样实现文本行处理每一行对比一个文件? [打印本页]
作者: tiandehui 时间: 2011-7-19 18:27 标题: 批处理怎样实现文本行处理每一行对比一个文件?
背景:
我在MS SQL SERVER 2005 的一个数据库中为每一个表生成的一个.csv 的文件 (表名.csv)。然后生成的一个总的表记录表名和记录数(rowcount.csv 表名||记录数);
我现在想做一个BAT从我的这个总表(rowcount.csv)取出每一行记录利用表名去找我生成的表名.csv,计算出这个.csv的记录数,然后对比这个数与rowcount.csv取出的这个表的记录数是否相等,如果不相等调用运行MS SQL SERVER 2005 中的存储过程(pro_表名),直到运行3次都还不成功,那么在rowcount.csv 运行下一行;
谢谢各位;
作者: ArdentMan 时间: 2011-7-19 18:58
- @Echo Off
- For /F "tokens=1,2 delims=|" %%a In (rowcount.csv) Do (
- Set "Flag="
- For /F "delims=:" %%c In ('Findstr /n .* "%%a"') Do If "%%b" EQU "%%c" Set "Flag=a"
- If Not Defined Flag (
- For /L %%d In (1,1,3) Do (
- If Not Defined Flag (
- Start /wait "" "这里自己写SQL的语句"
- For /F "delims=:" %%e In ('Findstr /n .* "%%a"') Do If "%%b" EQU "%%e" Set "Flag=a"
- )
- )
- )
- )
复制代码
作者: tiandehui 时间: 2011-7-19 19:46
2# ArdentMan
谢谢您!
有可能我描述的不够详细;
1. 这个是我的ROWCOUNT.csv里边的记录;
ADJUSTDETAIL||35936
DB||2001299
2.
生成的ADJUSTDETAIL.csv,DB.csv
我就想写一个bat读ROWCOUNT.csv逐行记录,来给我的文件ADJUSTDETAIL.csv,DB.cs 的记录条数相对比,如果与rowcount.csv读取记录||后面数据与生成的表的.csv不相等,则循环执行我的procedure再生成表名.csv;直到循环3次;
例如:rowcount.csv的第一条记录ADJUSTDETAIL||35936, 记录好表名ADJUSTDETAIL.然后利用这样的ADJUSTDETAIL 表名,去查找ADJUSTDETAIL.csv,统计ADJUSTDETAIL.csv的记录条数与读取rowcount.csv(ADJUSTDETAIL||35936) 35936 是否相等,相等则运行下一条记录DB||2001299,如果不相等,则运行我的procedure再生成ADJUSTDETAIL.csv 再次判断记录条数是否相,如果相等则下一次记录,如果不相等,则再次生成ADJUSTDETAIL.csv直到运行3次。运行3次后,不管记录数是否相等,运行ROWCOUNT.csv的下一条记录;
作者: ArdentMan 时间: 2011-7-19 19:50
本帖最后由 ArdentMan 于 2011-7-19 19:52 编辑
请看看我的代码是不是你描述的意思,上面没注意你文件名没加.csv后缀:- @Echo Off
- For /F "tokens=1,2 delims=|" %%a In (rowcount.csv) Do (
- Set "Flag="
- For /F "delims=:" %%c In ('Findstr /n .* "%%a.csv"') Do If "%%b" EQU "%%c" Set "Flag=a"
- If Not Defined Flag (
- For /L %%d In (1,1,3) Do (
- If Not Defined Flag (
- Start /wait 这里自己写出SQL运行procedure的语句,我不知道的
- For /F "delims=:" %%e In ('Findstr /n .* "%%a.csv"') Do If "%%b" EQU "%%e" Set "Flag=a"
- )
- )
- )
- )
复制代码
作者: tiandehui 时间: 2011-7-19 20:05
4# ArdentMan
好的,谢谢哈;我明天测试一下;
作者: tiandehui 时间: 2011-7-19 20:45
4# ArdentMan
我看了一个,我有两个疑问:
麻烦你说一下;
1. 就是从rowcount.csv读出来的的数值,在那里给我从表名.csv里计算出来的数值进行的对比;
2. 接着1说,如果值不相等,那么我要运行3次,这个是在那里实现的?
3.第二个for 是不要括号 For /F "delims=:" %%c In ('Findstr /n .* "%%a.csv"') Do ( ?
4.For /L %%d In (1,1,3) 这里的1,1,3指的是?
谢谢
作者: CUer 时间: 2011-7-19 22:29
6# tiandehui
系统自带的帮助里面有讲解
FOR /L %variable IN (start,step,end) DO command [command-parameters]
The set is a sequence of numbers from start to end, by step amount.
So (1,1,5) would generate the sequence 1 2 3 4 5 and (5,-1,1) would
generate the sequence (5 4 3 2 1)
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |