中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-07-12 12:11
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 如何给新员工分配工号?合并两张表 查看 1,037 回复 10
楼 主 如何给新员工分配工号?合并两张表 发表于 2009-04-23 01:56 ·  新加坡
中级用户
★★
积分 400
发帖 211
注册 2007-09-30 18:02
18年会员
UID 98650
性别 男
状态 离线
有两张表,如何自动给新员工分配员工号?合并两张表,得到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 ]
2 发表于 2009-04-23 03:25 ·  中国 江西 赣州 电信
银牌会员
★★★★
积分 2,025
发帖 1,122
注册 2007-09-05 20:15
18年会员
UID 96653
性别 男
状态 离线
如果 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
3 发表于 2009-04-23 04:09 ·  中国 上海 联通
中级用户
★★
积分 400
发帖 211
注册 2007-09-30 18:02
18年会员
UID 98650
性别 男
状态 离线
Originally posted by tireless at 2009-4-23 03:25 AM:
如果 NEW.txt 里面的数字后一位比前一位大1:
@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 ]
4 发表于 2009-04-23 04:22 ·  中国 江西 赣州 电信
银牌会员
★★★★
积分 2,025
发帖 1,122
注册 2007-09-05 20:15
18年会员
UID 96653
性别 男
状态 离线
@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 ]
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
uiopuiop +2 2009-04-23 04:30
5 发表于 2009-04-23 04:30 ·  美国 惠普HP
中级用户
★★
积分 400
发帖 211
注册 2007-09-30 18:02
18年会员
UID 98650
性别 男
状态 离线
re: 员工号位数是否一致? 不一致,我这里只是举个例子,实际情况可能是一个随机的EMAIL 地址。

set #!n!=%%a
中#n表示什么?

echo.ab 和 echo ab有什么区别?

[ Last edited by uiopuiop on 2009-4-23 at 04:38 ]
6 Re 5楼 发表于 2009-04-23 04:41 ·  中国 江西 赣州 电信
银牌会员
★★★★
积分 2,025
发帖 1,122
注册 2007-09-05 20:15
18年会员
UID 96653
性别 男
状态 离线
# 是变量名的一部分。有点多余了,可以把代码中的 # 去掉。

echo.ab 中的点也多余了。。。可以去掉。加一个点是为了防止后面的字符是 on 或 off,造成 echo on 或 echo off;要输出空行时也要加点。

[ Last edited by tireless on 2009-4-23 at 04:46 ]
7 发表于 2009-04-23 04:53 ·  中国 上海 联通
中级用户
★★
积分 400
发帖 211
注册 2007-09-30 18:02
18年会员
UID 98650
性别 男
状态 离线
很经典,简洁,多谢!
8 发表于 2009-04-23 05:06 ·  中国 上海 松江区 电信
初级用户
积分 20
发帖 24
注册 2009-03-18 05:33
17年会员
UID 141631
性别 男
状态 离线
3楼,4楼的我试了下,怎么不行啊????
结果:
hao,NEW,
qian, OLD
sun, NEW, 100
li, OLD
zhou, NEW, 101
wu, TEMP
9 发表于 2009-04-23 05:11 ·  中国 湖北 黄石 电信
中级用户
★★
积分 330
发帖 244
注册 2006-04-14 14:07
20年会员
UID 53823
性别 男
来自 湖北
状态 离线
haoNEW,
qian, OLD
sun, NEW, 100
li, OLD
zhou, NEW, 101
wu, TEMP
10 发表于 2009-04-23 05:13 ·  中国 湖北 黄石 电信
中级用户
★★
积分 330
发帖 244
注册 2006-04-14 14:07
20年会员
UID 53823
性别 男
来自 湖北
状态 离线
来个JS的
fso=WScript.createobject("scripting.filesystemobject");
f1=fso.opentextfile("Employee.txt")
f2=fso.opentextfile("NEW.txt");
f3=fso.createtextfile("$_dest.txt",1)
re=/\bNEW*$/i;
while(!f1.AtEndOfStream){
sss=f1.readline();
if(re.test(sss))sss=sss.replace(re,"NEW,"+f2.readline());
f3.writeline(sss);
}
11 发表于 2009-04-23 21:53 ·  中国 辽宁 本溪 联通
银牌会员
★★★
积分 1,212
发帖 464
注册 2006-12-13 21:11
19年会员
UID 73417
性别 男
状态 离线

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 ]
论坛跳转: