Board logo

标题: 如何给新员工分配工号?合并两张表 [打印本页]

作者: uiopuiop     时间: 2009-4-23 01:56    标题: 如何给新员工分配工号?合并两张表
有两张表,如何自动给新员工分配员工号?合并两张表,得到NEW.txt Employee.txt 包含如下内容 zhao,NEW qian, OLD sun, NEW li, OLD zhou, NEW wu,TEMP NEW.txt 包含如下内容 (新员工工号) 100 101 102 NEW2.txt 需要得到以下内容: zhao,NEW, 100 qian, OLD sun, NEW, 101 li, OLD zhou, NEW, 102 wu,TEMP [ Last edited by uiopuiop on 2009-4-23 at 03:23 ]

作者: tireless     时间: 2009-4-23 03:25
如果 NEW.txt 里面的数字后一位比前一位大1:
@echo off&setlocal enabledelayedexpansion
set /p n=<new.txt
(for /f "tokens=1,2 delims=, " %%a in (Employee.txt) do (
  if /i "%%b"=="NEW" (
    echo.%%a, %%b, !n!
    set /a n+=1
  ) else echo.%%a, %%b
))>NEW2.txt
start NEW2.txt

作者: uiopuiop     时间: 2009-4-23 04:09
Originally posted by tireless at 2009-4-23 03:25 AM: 如果 NEW.txt 里面的数字后一位比前一位大1: [code]@echo off&setlocal enabledelayedexpansion set /p n=<new.txt (for /f "tokens=1,2 delims=, " %%a in (Employee.txt) ...
不好意思,在实际情况下NEW.txt 里面的不一定是数字而且是没有规律字符串。 想到要 用 set /a num+=1 给每个符合的记录编号,但想不出有什么简便的算法。 [ Last edited by uiopuiop on 2009-4-23 at 04:16 ]

作者: tireless     时间: 2009-4-23 04:22
@echo off&setlocal enabledelayedexpansion
set n=
for /f "tokens=*" %%a in (new.txt) do (
  set /a n+=1
  set #!n!=%%a
)

set n=
(for /f "tokens=1,2 delims=, " %%a in (Employee.txt) do (
  if /i "%%b"=="new" (
    set /a n+=1
    for %%i in (#!n!) do echo.%%a, %%b, !%%i!
  ) else echo.%%a, %%b
))>NEW2.txt
p.s. 员工号位数是否一致? [ Last edited by tireless on 2009-4-23 at 04:26 ]

作者: uiopuiop     时间: 2009-4-23 04:30
re: 员工号位数是否一致? 不一致,我这里只是举个例子,实际情况可能是一个随机的EMAIL 地址。 set #!n!=%%a 中#n表示什么? echo.ab 和 echo ab有什么区别? [ Last edited by uiopuiop on 2009-4-23 at 04:38 ]

作者: tireless     时间: 2009-4-23 04:41    标题: Re 5楼
# 是变量名的一部分。有点多余了,可以把代码中的 # 去掉。 echo.ab 中的点也多余了。。。可以去掉。加一个点是为了防止后面的字符是 on 或 off,造成 echo on 或 echo off;要输出空行时也要加点。 [ Last edited by tireless on 2009-4-23 at 04:46 ]

作者: uiopuiop     时间: 2009-4-23 04:53
很经典,简洁,多谢!

作者: mmh1     时间: 2009-4-23 05:06
3楼,4楼的我试了下,怎么不行啊???? 结果: hao,NEW, qian, OLD sun, NEW, 100 li, OLD zhou, NEW, 101 wu, TEMP

作者: freeants001     时间: 2009-4-23 05:11
haoNEW, qian, OLD sun, NEW, 100 li, OLD zhou, NEW, 101 wu, TEMP

作者: freeants001     时间: 2009-4-23 05:13
来个JS的
fso=WScript.createobject("scripting.filesystemobject");
f1=fso.opentextfile("Employee.txt")
f2=fso.opentextfile("NEW.txt");
f3=fso.createtextfile("$_dest.txt",1)
re=/\bNEW[ \t]*$/i;
while(!f1.AtEndOfStream){
    sss=f1.readline();
    if(re.test(sss))sss=sss.replace(re,"NEW,"+f2.readline());
    f3.writeline(sss);
}

作者: jmz573515     时间: 2009-4-23 21:53
on error resume next
set fso=createobject("scripting.filesystemobject")
set f1=fso.opentextfile("Employee.txt")
set f2=fso.opentextfile("NEW.txt")
set f3=fso.createtextfile("Employee_new.txt")
do while f1.atendofstream<>true
	n=f1.readline
	if f1.line mod 2=0 then
		sm=sm &n & "," & f2.readline & vbcrlf
		if err then err.caler
	else
		sm=sm & n & vbcrlf
	end if
loop
f3.write sm
f1.close
f2.close
f3.close
set fso=nothing
[ Last edited by jmz573515 on 2009-4-23 at 21:58 ]