中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 合并多张表, 添加数据项 (2)- 已结
作者:
标题: 合并多张表, 添加数据项 (2)- 已结 上一主题 | 下一主题
uiopuiop
中级用户





积分 400
发帖 211
注册 2007-9-30
状态 离线
『楼 主』:  合并多张表, 添加数据项 (2)- 已结

如何把附件中的XXX.txt 合并到 原表.txt 中,输出另外一张表,要求是这样的: XXX 为 ERP.txt SOL.txt WWM.txt (数量不定,并且内容为不规则的字符串) 如果在 原表.txt 中的第一列发现包含字符串“STUDY” ,并且第一列字符串开头是(ERP / SOL/WWM),则从 ERP.TXT 或 SOL.TXT或 WWM.TXT 中的内容调出一个记录,并加在 原表.txt 的第三列上。如果不符合条件,就不加任何数据项在第三列上。 另外,如果第一列字符串有重复,则分配相同的字符串在第三列。 输出结果为: ADMIN , fda DDIC , adfd SOLMAN , ds SPDEMO , da SPDEMO , fda WDDEMO , fda WDDEMO , Sfds WWMstudy01 , adfe ,wwm_WWM WWMstudy01 , fds , wwm_WWM SOLstudy01 , sa, SOL_rqrew SOLstudy02 , adsf, SOL_ewe WWMstudy03 , WfWM, wwm_W3 ERPstudy03 , dsERP, ERP_312 SOLstudy03 , SOaL ,SOL_fdfdd SOLstudy04 , SaOL, SOL_kjlkj WWMstudy04 , WWM , wwm_WW3 ERPstudy05 , EadRP,ERP_ERP31 WWMstudy05 , WaWM, wwm_WJKJ ERPstudy06 , ER2P, ERP_55ERP ERPstudy07 , ERaP, ERP_ERP3 ERPstudy88 , E2RP, ERP_8687 SOLstudy08 , SsOL, SOL_oioi WWMstudy06 , WWM, wwm_WJII ERPstudy09 , ERdP, ERP_3 SOLstudy99 , SfOL, SOL_vczxcv ~~~~~~~~~~~~~~~~~~~~ 下面的代码有问题: @echo off setlocal enabledelayedexpansion set List=ERP SOL WWM set Filter=ERPstudy SOLstudy WWMstudy for %%a in (%List%) do ( set n= for /f "delims=" %%i in (%%a.txt) do ( set /a n+=1 set %%a_!n!=%%i ) ) (for /f "tokens=1,2 delims=, " %%a in (原表.txt) do ( set var=%%a if /i "!var:stud=!" neq "%%a" ( set /a %%a+=1 set var2=%var:~,3%_!%%a! echo *!var2!* for %%i in (!var2!) do echo %%a ,!%%i! ) else echo %%a )) >main_new.txt pause 参见帖子: www.cn-dos.net/forum ... [ Last edited by uiopuiop on 2009-5-25 at 09:31 ]


附件 1: test table2.zip (2009-5-17 11:07, 1.05 K,下载次数: 7)
2009-5-17 11:07
查看资料  发短消息 网志   编辑帖子  回复  引用回复
uiopuiop
中级用户





积分 400
发帖 211
注册 2007-9-30
状态 离线
『第 2 楼』:  

哪位大哥行行好,帮个忙,谢谢了! 不是我懒,我想了一整天都没搞定。


2009-5-18 02:25
查看资料  发短消息 网志   编辑帖子  回复  引用回复
tireless
银牌会员





积分 2025
发帖 1122
注册 2007-9-5
状态 离线
『第 3 楼』:  

@echo off
setlocal enabledelayedexpansion
set List=ERP SOL WWM

for %%a in (%List%) do (
  set n=
  for /f "delims=" %%i in (%%a.txt) do (
    set %%a_!n!=%%i
    set /a n+=1
  )
)

(for /f "tokens=1,2 delims=, " %%a in (原表.txt) do (
  set var=%%a
  if "!var:STUDY=!" neq "!var!" (
    if not defined %%a (
      for %%i in (!var:~^,3!) do (
        for %%j in (!var:~^,3!_!%%i!) do echo %%a , %%b , !%%j!&set %%a=!%%j!
        set /a %%i+=1
      )
    ) else echo %%a , %%b , !%%a!
  ) else echo %%a , %%b
))>原表_new.txt
@echo off
setlocal enabledelayedexpansion
set List=ERP SOL WWM

for %%a in (%List%) do (
  for /f "delims=" %%i in (%%a.txt) do set %%a=!%%a! %%i
)

(for /f "tokens=1,2 delims=, " %%a in (原表.txt) do (
  set var=%%a
  if "!var:STUDY=!"=="!var!" (echo %%a , %%b) else (
    if defined %%a (echo %%a , %%b , !%%a!) else (
      for %%i in (!var:~^,3!) do (
        for /f "tokens=1,*" %%1 in ("!%%i!") do (
          echo %%a , %%b , %%1
          set "%%a=%%1" & set "!var:~,3!=%%2"
))))))>__new.txt
[ Last edited by tireless on 2009-5-19 at 08:24 ]


   此帖被 +4 点积分        点击查看详情   
评分人:【 uiopuiop 分数: +4  时间:2009-5-18 11:59


2009-5-18 06:28
查看资料  发短消息 网志   编辑帖子  回复  引用回复
uiopuiop
中级用户





积分 400
发帖 211
注册 2007-9-30
状态 离线
『第 4 楼』:  

感激不尽!!! 我现在正在将代码试着应用到实际环境中。


2009-5-18 12:01
查看资料  发短消息 网志   编辑帖子  回复  引用回复
terse
银牌会员





积分 2404
发帖 946
注册 2005-9-8
状态 离线
『第 5 楼』:  

for %%i .... for %%j ... 这里面 直接CALL 怎么样




简单!简单!再简单!
2009-5-18 14:01
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
tireless
银牌会员





积分 2025
发帖 1122
注册 2007-9-5
状态 离线
『第 6 楼』:  Re 5 楼

CALL 很慢。宁愿用几个 for 代替一个 call 命令耗时清单 [ Last edited by tireless on 2009-5-18 at 14:49 ]


2009-5-18 14:43
查看资料  发短消息 网志   编辑帖子  回复  引用回复
uiopuiop
中级用户





积分 400
发帖 211
注册 2007-9-30
状态 离线
『第 7 楼』:  

没有理解第二种方法是怎么把其他3个表里的内容进行赋值的. 变量名是什么? (例如第一种方法里的变量名是SOL_1, SOL_2, .....) ECHO 出来也没看懂: @echo off echo %time% setlocal enabledelayedexpansion set List=ERP SOL WWM MMM for %%a in (%List%) do ( for /f "delims=" %%i in (%%a.txt) do (set %%a=!%%a! %%i echo !%%a! echo ~~~~~~~~~~~~~~~) ) ############################### ERP_312 ~~~~~~~~~~~~~~~ ERP_312 ERP_ERP31 ~~~~~~~~~~~~~~~ ERP_312 ERP_ERP31 ERP_55ERP ~~~~~~~~~~~~~~~ ERP_312 ERP_ERP31 ERP_55ERP ERP_ERP3 ~~~~~~~~~~~~~~~ ERP_312 ERP_ERP31 ERP_55ERP ERP_ERP3 ERP_8687 ~~~~~~~~~~~~~~~ ERP_312 ERP_ERP31 ERP_55ERP ERP_ERP3 ERP_8687 ERP_3 ~~~~~~~~~~~~~~~ ERP_312 ERP_ERP31 ERP_55ERP ERP_ERP3 ERP_8687 ERP_3 ERP_32 ~~~~~~~~~~~~~~~ SOL_rqrew ~~~~~~~~~~~~~~~ SOL_rqrew SOL_ewe ~~~~~~~~~~~~~~~ SOL_rqrew SOL_ewe SOL_fdfdd ~~~~~~~~~~~~~~~ SOL_rqrew SOL_ewe SOL_fdfdd SOL_kjlkj ~~~~~~~~~~~~~~~ SOL_rqrew SOL_ewe SOL_fdfdd SOL_kjlkj SOL_oioi ....... [ Last edited by uiopuiop on 2009-5-20 at 12:00 ]


2009-5-20 11:59
查看资料  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: