中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-10-01 01:38
共 47,813 主题排行 / 349,918 发帖 / 今日 0 篇 / 48,279 会员排行
DOS批处理 & 脚本技术(批处理室) » 合并多张表, 添加数据项。
可打印版本  2,065 / 15
第1楼 uiopuiop 发表于 2009-04-25 06:34
中级用户 发帖 211 积分 400
合并多张表, 添加数据项。
如何把附件中的三张表合并起来,要求是这样的:
如果在MAIN.TXT 中的第一列发现包含字符串“DEN” ,然后按照第二列的信息(ERP / SOL),则从 ERP.TXT 或 SOL.TXT中的内容调出一个记录,并加在MAIN.TXT 的第三列上。如果不符合条件,就不加任何数据项在第三列上。

结果大致是这样的:
MAIN.TXT
ADMIN , SOL ,
DDIC , SOL ,
DDIC , ERP ,
DDIC , ERP ,
DDIC , ERP ,
FIDEMO , ERP ,
J2EE_ADMIN , ERP ,
SAP* , ERP ,
SAP* , ERP ,
SAPUSER , ERP ,
SOLMAN , ERP ,
SPDEMO , ERP ,
SPDEMO , ERP ,
WDDEMO , ERP ,
WDDEMO , SOL ,
STUDENT01 , ERP , rqrew
STUDENT01 , ERP , ewe
STUDENT02 , SOL , 4312
STUDENT02 , SOL , 4431
STUDENT03 , ERP , fdfdd
STUDENT03 , ERP , kjlkj
STUDENT04 , SOL , 4554
STUDENT04 , SOL , 443
STUDENT05 , SOL , 78687
STUDENT05 , ERP , oioi
........


我想了好久,但是脚本老是不能正常运行。
参见帖子,http://www.cn-dos.net/forum/viewthread.php?tid=47136&pid=330725&page=1&sid=pyhnrc#pid330725
不过现在是3张表了,情况复杂了。


set ListName=ERP SOL

for %%i in (%ListName%) do (call :Add_record %%i)

GOTO :EOF


:: ++++++++++++++++++++++++++++++++++++++++++++++
:Add_record
setlocal enabledelayedexpansion
set n=
for /f "eol=# tokens=1" %%i in (%1.txt) do (
set /a n+=1
set NUM_!n!=%%i
)

set n=
for /F "eol=# tokens=1-3 delims=," %%A in (main.txt) do (
if "%%C"=="" (echo %%A|find /i "ENT")
if NOT ERRORLEVEL 1 if "%%B"=="%1" ( set /a n+=1
for %%G in (NUM_!n!) do (echo.%%A ,%%B , !%%C!<nul>>main.txt.tmp )
) else (
echo.%%A , %%B<nul>>main.txt.tmp)
)
copy /y Instance.cfg.tmp main.txt & del /f /q main.txt.tmp
endlocal
goto :eof

:: ++++++++++++++++++++++++++++++++++++++++++++++

[ Last edited by uiopuiop on 2009-4-25 at 07:25 ]

附件
test table.zip (534 bytes)
第2楼 freeants001 发表于 2009-04-25 06:53
中级用户 发帖 244 积分 330 来自 湖北
如果在MAIN.TXT 中的第一列发现字符串为“DEN”,是子串吧,下载的符件没有发现字符串"DEN",只有子串"DEN"
第3楼 uiopuiop 发表于 2009-04-25 07:03
中级用户 发帖 211 积分 400
Originally posted by freeants001 at 2009-4-25 06:53 AM:
如果在MAIN.TXT 中的第一列发现字符串为“DEN”,是子串吧,下载的符件没有发现字符串"DEN",只有子串"DEN"


对的是包含字符串 "DEN", 没说清楚,更正了。
第4楼 netbenton 发表于 2009-04-25 07:12
银牌会员 发帖 752 积分 1,916 来自 广西
偶想到了一个纯批的方法,暂不公布,看看有没有更好的。^_^
第5楼 uiopuiop 发表于 2009-04-25 07:21
中级用户 发帖 211 积分 400
Originally posted by netbenton at 2009-4-25 07:12 AM:
偶想到了一个纯批的方法,暂不公布,看看有没有更好的。^_^


纯批好,有好主意就拿出来看看吧,说不定别人也会有什么启发,谢谢啦!昨天晚上我想到两点半都没想出来,我的脚本嵌套太多了,自己都搞不清楚。

[ Last edited by uiopuiop on 2009-4-25 at 07:38 ]
第6楼 freeants001 发表于 2009-04-25 07:59
中级用户 发帖 244 积分 330 来自 湖北
终于排除错误了,很苯的方法~~


[ Last edited by freeants001 on 2009-4-26 at 04:01 ]
第7楼 netbenton 发表于 2009-04-25 08:07
银牌会员 发帖 752 积分 1,916 来自 广西


多出了一点,删掉了。

[ Last edited by netbenton on 2009-4-25 at 06:11 ]
第8楼 tireless 发表于 2009-04-25 08:10
银牌会员 发帖 1,122 积分 2,025
第9楼 netbenton 发表于 2009-04-25 08:16
银牌会员 发帖 752 积分 1,916 来自 广西
8楼的:
for %%i in (%%b!%%b!) do echo %%a , %%b , !%%i!
用得好,加分
第10楼 uiopuiop 发表于 2009-04-25 08:49
中级用户 发帖 211 积分 400
to: tireless
老是麻烦tireless兄,正是太感激了 ~~~~
尽我力量给你加了4分,别嫌少啊。

if "!var:DEN=!" neq "%%a" 用的也很巧妙 :)
第11楼 netbenton 发表于 2009-04-25 08:53
银牌会员 发帖 752 积分 1,916 来自 广西
来个另类的,不用 if 也可以做到
第12楼 uiopuiop 发表于 2009-04-25 09:11
中级用户 发帖 211 积分 400
Originally posted by tireless at 2009-4-25 08:10 AM:
第13楼 tireless 发表于 2009-04-25 10:01
银牌会员 发帖 1,122 积分 2,025
Re 12 楼
第14楼 uiopuiop 发表于 2009-04-25 10:18
中级用户 发帖 211 积分 400
RE: 第 13 楼
多谢了,牛人啊~~~ 救我于苦难之中。。。。


怪我没很好的理解下面语句的意思:
set /a %%b+=1
for %%i in (%%b_!%%b!) do echo %%a , %%b , !%%i!

[ Last edited by uiopuiop on 2009-4-25 at 10:19 ]
第15楼 tireless 发表于 2009-04-25 11:09
银牌会员 发帖 1,122 积分 2,025
Re 14 楼
先设置了这些变量:
ERP_1
ERP_2
ERP_3
...
SOL_1
SOL_2
SOL_3
...

set /a %%b+=1
假如 %%b 为 ERP,则变量 ERP 的数值每次加 1,然后 !ERP_1! , !ERP_2! ... 就引用了之前设置好的变量
1 2  下一页
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023