|
uiopuiop
中级用户
积分 400
发帖 211
注册 2007-9-30
状态 离线
|
『楼 主』:
合并多张表, 添加数据项。
如何把附件中的三张表合并起来,要求是这样的:
如果在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/view ... id=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 ]
附件
1: test table.zip (2009-4-25 06:34, 534 bytes,下载次数: 9)
|
|
2009-4-25 06:34 |
|
|
freeants001
中级用户
积分 330
发帖 244
注册 2006-4-14 来自 湖北
状态 离线
|
『第
2 楼』:
如果在MAIN.TXT 中的第一列发现字符串为“DEN”,是子串吧,下载的符件没有发现字符串"DEN",只有子串"DEN"
|
|
2009-4-25 06:53 |
|
|
uiopuiop
中级用户
积分 400
发帖 211
注册 2007-9-30
状态 离线
|
『第
3 楼』:
Quote: | Originally posted by freeants001 at 2009-4-25 06:53 AM:
如果在MAIN.TXT 中的第一列发现字符串为“DEN”,是子串吧,下载的符件没有发现字符串"DEN",只有子串"DEN" |
|
对的是包含字符串 "DEN", 没说清楚,更正了。
|
|
2009-4-25 07:03 |
|
|
netbenton
银牌会员
批处理编程迷
积分 1916
发帖 752
注册 2008-12-28 来自 广西
状态 离线
|
『第
4 楼』:
偶想到了一个纯批的方法,暂不公布,看看有没有更好的。^_^
|
精简
[你的+我的+他的]=>[大家的] 个人网志 |
|
2009-4-25 07:12 |
|
|
uiopuiop
中级用户
积分 400
发帖 211
注册 2007-9-30
状态 离线
|
『第
5 楼』:
Quote: | Originally posted by netbenton at 2009-4-25 07:12 AM:
偶想到了一个纯批的方法,暂不公布,看看有没有更好的。^_^ |
|
纯批好,有好主意就拿出来看看吧,说不定别人也会有什么启发,谢谢啦!昨天晚上我想到两点半都没想出来,我的脚本嵌套太多了,自己都搞不清楚。
[ Last edited by uiopuiop on 2009-4-25 at 07:38 ]
|
|
2009-4-25 07:21 |
|
|
freeants001
中级用户
积分 330
发帖 244
注册 2006-4-14 来自 湖北
状态 离线
|
『第
6 楼』:
终于排除错误了,很苯的方法~~
@echo off&setlocal enabledelayedexpansion
del $dest$.txt>nul 2>nul
for /f "tokens=1,2 delims=, " %%i in (main.txt) do (
echo "%%~i"|findstr /c:"DEN">nul&& set /a flag=1
if !flag! equ 1 (
if /i "%%~j" equ "erp" (
call:erp "%%~i" "%%~j"
) else (
if /i "%%~j" equ "SOL" (
call:sol "%%~i" "%%~j"
) else (
echo %%~i, %%~j>>$dest$.txt
)
)
) else (
echo %%~i, %%~j>>$dest$.txt
)
set /a flag=0
)
pause
goto:eof
:erp
set col3=
for /f "%mm%" %%i in (erp.txt) do (set col3=%%i&goto:out1)
:out1
echo %~1, %~2, %col3%>>$dest$.txt
set /a m+=1
set mm=skip^=%m%
goto:eof
:sol
set col3=
for /f "%nn%" %%i in (sol.txt) do (set col3=%%i&goto:out2)
:out2
echo %~1, %~2, %col3%>>$dest$.txt
set /a n+=1
set nn=skip^=%n%
goto:eof [ Last edited by freeants001 on 2009-4-26 at 04:01 ]
|
|
2009-4-25 07:59 |
|
|
netbenton
银牌会员
批处理编程迷
积分 1916
发帖 752
注册 2008-12-28 来自 广西
状态 离线
|
|
2009-4-25 08:07 |
|
|
tireless
银牌会员
积分 2025
发帖 1122
注册 2007-9-5
状态 离线
|
|
2009-4-25 08:10 |
|
|
netbenton
银牌会员
批处理编程迷
积分 1916
发帖 752
注册 2008-12-28 来自 广西
状态 离线
|
『第
9 楼』:
8楼的:
for %%i in (%%b!%%b!) do echo %%a , %%b , !%%i!
用得好,加分
|
精简
[你的+我的+他的]=>[大家的] 个人网志 |
|
2009-4-25 08:16 |
|
|
uiopuiop
中级用户
积分 400
发帖 211
注册 2007-9-30
状态 离线
|
『第
10 楼』:
to: tireless
老是麻烦tireless兄,正是太感激了 ~~~~
尽我力量给你加了4分,别嫌少啊。
if "!var:DEN=!" neq "%%a" 用的也很巧妙 :)
|
|
2009-4-25 08:49 |
|
|
netbenton
银牌会员
批处理编程迷
积分 1916
发帖 752
注册 2008-12-28 来自 广西
状态 离线
|
|
2009-4-25 08:53 |
|
|
uiopuiop
中级用户
积分 400
发帖 211
注册 2007-9-30
状态 离线
|
『第
12 楼』:
Quote: | Originally posted by tireless at 2009-4-25 08:10 AM:
[code]@echo off&setlocal enabledelayedexpansion
for %%a in (ERP SOL) do (
set n=
for /f "delims=" %%i in (%%a.txt) do (
set /a n+=1
set %%a!n!=%%i
)
)
(for /f ... |
|
突然想到,如果第二列的信息(ERP / SOL),类型多于2个的话,应该这么办?比如有可以能是3个 (ERP1, ERP2, SOL1 ) 或 4个等 , 有没有办法让程序变的灵活点???
[ Last edited by uiopuiop on 2009-4-25 at 09:13 ]
|
|
2009-4-25 09:11 |
|
|
tireless
银牌会员
积分 2025
发帖 1122
注册 2007-9-5
状态 离线
|
|
2009-4-25 10:01 |
|
|
uiopuiop
中级用户
积分 400
发帖 211
注册 2007-9-30
状态 离线
|
『第
14 楼』:
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 ]
|
|
2009-4-25 10:18 |
|
|
tireless
银牌会员
积分 2025
发帖 1122
注册 2007-9-5
状态 离线
|
『第
15 楼』:
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! ... 就引用了之前设置好的变量
|
|
2009-4-25 11:09 |
|
|