中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-08-06 03:22
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [英雄求助帖已结]数据格式转换输出问题求教! 查看 2,020 回复 27
楼 主 [英雄求助帖已结]数据格式转换输出问题求教! 发表于 2007-10-20 18:11 ·  中国 江西 抚州 广昌县 电信
中级用户
★★
积分 220
发帖 99
注册 2005-08-16 01:08
20年会员
UID 41691
状态 离线
我有data.txt文本,内容如下:

1 135817 C178189 16 ¥32 3 * 3 * 0 31 10 31 3 * * 0 * 10 1 出票 撤销 过期 下载
2 135935 C177784 48 ¥96 3 * * 31 * 310 * 3 31 30 31 * 10 0 1 出票 撤销 过期 下载
3 135943 C178126 16 ¥32 31 30 * 31 0 * 0 3 3 * * 0 * 10 1 出票 撤销 过期 下载
4 135989 C178199 1 ¥2 3 * 3 * * 3 0 3 3 * * 0 0 0 1 出票 撤销 过期 下载
5 135990 C178199 1 ¥2 3 * 3 * 0 3 * 3 3 * * 0 0 0 1 出票 撤销 过期 下载
6 135991 C178199 1 ¥2 3 * 3 * 0 3 0 3 3 * * 0 0 * 1 出票 撤销 过期 下载
7 135992 C178199 1 ¥2 3 * 3 3 * 3 * 3 3 * * 0 0 0 1 出票 撤销 过期 下载
8 135993 C178199 1 ¥2 3 * 3 3 * 3 0 3 3 * * 0 0 * 1 出票 撤销 过期 下载
9 135994 C178199 1 ¥2 3 * 3 3 0 3 * 3 3 * * 0 0 * 1 出票 撤销 过期 下载
10 135995 C178199 1 ¥2 3 0 3 * * 3 * 3 3 * * 0 0 0 1 出票 撤销 过期 下载

我想通过批处理把以上内容转换成以下格式,要求是:
1、删除前5列数据
2、从第6列的数据开始到19列的数据逢两位数和三位数就加括号,如30变成(30)
3、删除后20--24列数据
4、然后输出两个文件分别为1.TXT 2.TXT,1.TXT中包含所有带括号的数据,2.TXT中包含所有不带括号的数据

转换后格式如下

1.TXT
3*3*0(31)(10)(31)3**0*(10)
3**(31)*(310)*3(31)(30)(31)*(10)0
(31)(30)*(31)0*033**0*(10)

2.TXT
3*3**3033**000
3*3*03*33**000
3*3*03033**00*
3*33*3*33**000
3*33*3033**00*
3*3303*33**00*
303**3*33**000

请高手指点,谢谢!

[ Last edited by hbby on 2007-10-20 at 11:13 PM ]
2 发表于 2007-10-20 18:14 ·  中国 陕西 西安 电信
铂金会员
★★★★
积分 5,212
发帖 2,478
注册 2007-02-08 23:39
19年会员
UID 79003
性别 男
状态 离线
10为什么不加?
3 发表于 2007-10-20 18:20 ·  中国 江西 抚州 广昌县 电信
中级用户
★★
积分 220
发帖 99
注册 2005-08-16 01:08
20年会员
UID 41691
状态 离线
10也加
4 发表于 2007-10-20 20:08 ·  中国 浙江 杭州 电信
高级用户
★★
积分 537
发帖 219
注册 2007-08-04 09:43
19年会员
UID 94620
性别 男
来自 杭州--半山
状态 离线
echo off
@for /f "tokens=6-19" %%a in (a.txt) do (
echo %%a %%b %%c %%d %%e %%f %%g %%h %%i %%j %%k %%l %%m %%n|sed "s//\(&\)/g"|sed "s/ *//g"|more>>hbby_DATE.txt
)
sed "/^$/d" hbby_DATE.txt|sed -e "1,3w 1.txt" -e "4,$w 2.txt"
del hbby_DATE.txt
pause

[ Last edited by junchen2 on 2007-10-20 at 08:49 PM ]
5 发表于 2007-10-20 20:32 ·  中国 湖南 娄底 电信
银牌会员
★★★
积分 2,268
发帖 879
注册 2006-12-19 16:23
19年会员
UID 73968
性别 男
状态 离线

@echo off&set ji=2
setlocal EnableDelayedExpansion
for /f "tokens=5* delims= " %%a in (a.txt) do (
set var= %%b
set var=!var: *= #!
set var=!var: 出票=$!
set lis=!var:*$=!
call set lis=%%var:!lis!=%%
for %%i in (!lis!) do set ti=%%i
call set var=%%lis:!ti!=%%
for %%i in (!var!) do (
set num=%%i
if not "!num:~1,1!"=="" (set str=!str!^(%%i^)&set ji=1) else set str=!str!%%i
)
set str=!str:#= *!
set str=!str: =!
echo !str!>>!ji!.txt
set str=
set ji=2
)
pause


[ Last edited by 26933062 on 2007-10-20 at 10:55 PM ]
致精致简!
6 发表于 2007-10-20 20:51 ·  中国 江西 抚州 广昌县 电信
中级用户
★★
积分 220
发帖 99
注册 2005-08-16 01:08
20年会员
UID 41691
状态 离线
感谢4、5楼的老哥,四楼大哥输出有问题,还不是很完善
5楼的大哥结果有误,请你们在帮我想想,谢谢
7 发表于 2007-10-20 20:57 ·  中国 甘肃 平凉 电信
金牌会员
★★★★
积分 4,103
发帖 1,744
注册 2006-01-20 13:00
20年会员
UID 49241
性别 男
来自 甘肃.临泽
状态 离线
看错题目要求.....哎

[ Last edited by vkill on 2007-10-20 at 09:44 PM ]
8 发表于 2007-10-20 20:57 ·  中国 浙江 杭州 电信
高级用户
★★
积分 537
发帖 219
注册 2007-08-04 09:43
19年会员
UID 94620
性别 男
来自 杭州--半山
状态 离线
我测试没有问题。
9 发表于 2007-10-20 20:58 ·  中国 陕西 西安 电信
铂金会员
★★★★
积分 5,212
发帖 2,478
注册 2007-02-08 23:39
19年会员
UID 79003
性别 男
状态 离线
@echo off&setlocal EnableDelayedExpansion
for /f "tokens=6,7,8,9,10,11,12,13,14,15,16,17,18,19" %%a in (list.txt) do @Call :MySub %%a %%b %%c %%d %%e

%%f %%g %%h %%i %%j %%k %%l %%m %%n

pause>nul
GOTO :EOF

:MySub
Set StrAll=
:loop
Set Temp=%1
if %Temp:~0,1%==%1 Set StrAll=%StrAll%%1
if not %Temp:~0,1%==%1 Set StrAll=%StrAll%(%1)

shift
if "%1" == "" goto :Break
goto loop

:Break
echo %StrAll%

自己最后findstr下括号就可以分开了。
10 发表于 2007-10-20 21:12 ·  中国 江西 抚州 广昌县 电信
中级用户
★★
积分 220
发帖 99
注册 2005-08-16 01:08
20年会员
UID 41691
状态 离线
各位老大思路都很好,就是希望各位大哥帮我测试下结果,我测试总是不行,谢谢大家
11 发表于 2007-10-20 21:23 ·  中国 甘肃 平凉 电信
金牌会员
★★★★
积分 4,103
发帖 1,744
注册 2006-01-20 13:00
20年会员
UID 49241
性别 男
来自 甘肃.临泽
状态 离线
Originally posted by hbby at 2007-10-20 21:12:
各位老大思路都很好,就是希望各位大哥帮我测试下结果,我测试总是不行,谢谢大家

如果不行就是你的表述错误,你自己看着改改 了
12 发表于 2007-10-20 21:23 ·  中国 陕西 西安 电信
铂金会员
★★★★
积分 5,212
发帖 2,478
注册 2007-02-08 23:39
19年会员
UID 79003
性别 男
状态 离线
测试过的……

截图现在传不了……
13 发表于 2007-10-20 21:25 ·  中国 湖北 武汉 电信
版主
★★★★★
积分 11,386
发帖 4,938
注册 2006-07-23 17:10
20年会员
UID 59080
状态 离线
data.awk:

{
flag=0;
for(i=1;i<=NF;i++){
if(i<6||i>19){
$i="";
}else{
if(length($i)>1){
flag+=1;
$i="("$i")";
}
}
}
gsub(//,"");
if(flag>0){print $0>"1.txt"}else{print $0>"2.txt"}
}


命令行执行:
gawk -f data.awk data.txt


gawk 为外部工具,自己上网找找。
14 发表于 2007-10-20 21:26 ·  中国 江西 抚州 广昌县 电信
中级用户
★★
积分 220
发帖 99
注册 2005-08-16 01:08
20年会员
UID 41691
状态 离线
junchen2大哥,我导这个数据就出错了
1 137076 C178356 64 ¥128 30 * 3 31 * 31 * 30 3 31 * 0 * 10 1 出票 撤销 过期 下载
2 137077 C178357 16 ¥32 3 * * 31 0 * 0 31 31 * * 0 30 0 1 出票 撤销 过期 下载
3 137104 C178361 16 ¥32 30 * 3 * 10 31 * 3 3 * 31 0 * 0 1 出票 撤销 过期 下载
4 137105 C178362 1 ¥2 1 * 3 1 0 * * 3 * 1 1 * 3 0 1 出票 撤销 过期 下载
5 137147 C178233 64 ¥128 31 30 3 3 * 31 10 30 * * * 0 * 10 1 出票 撤销 过期 下载
6 137196 C178373 32 ¥64 3 10 3 30 * * * 3 * 31 31 30 0 * 1 出票 撤销 过期 下载
7 137197 C178341 8 ¥16 3 31 3 31 0 * 10 * 3 * * 0 * 0 1 出票 撤销 过期 下载
8 137198 C178264 32 ¥64 3 * 3 31 * 3 10 30 3 30 31 * * * 1 出票 撤销 过期 下载
9 137204 C178374 4 ¥8 * 0 3 3 10 3 0 3 * * * 0 * 10 1 出票 撤销 过期 下载
10 137205 C178374 4 ¥8 3 * 3 3 10 3 0 3 * * * 0 * 10 1 出票 撤销 过期 下载
11 137206 C178374 4 ¥8 3 0 * 3 10 3 0 3 * * * 0 * 10 1 出票 撤销 过期 下载
12 137207 C178374 4 ¥8 3 0 3 * 10 3 0 3 * * * 0 * 10 1 出票 撤销 过期 下载
13 137208 C178374 4 ¥8 3 0 3 3 10 * 0 3 * * * 0 * 10 1 出票 撤销 过期 下载
14 137209 C178374 4 ¥8 3 0 3 3 10 3 * 3 * * * 0 * 10 1 出票 撤销 过期 下载
15 137210 C178374 4 ¥8 3 0 3 3 10 3 0 * * * * 0 * 10 1 出票 撤销 过期 下载
16 137211 C178374 4 ¥8 3 0 3 3 10 3 0 3 * * * * * 10 1 出票 撤销 过期 下载
17 137227 C178369 32 ¥64 * 0 31 * * 31 10 3 * * 1 0 10 10 1 出票 撤销 过期 下载
18 137231 C178376 1 ¥2 * 0 3 1 * * 1 1 * 1 3 * 0 1 1 出票 撤销 过期 下载
19 137234 C178378 1 ¥2 * 0 3 1 1 3 * 3 1 * * 0 * 0 1 出票 撤销 过期 下载
20 137246 C178310 384 ¥768 31 * 3 31 * 31 10 31 * * * 10 310 10 1 出票 撤销 过期 下载
15 发表于 2007-10-20 21:33 ·  中国 浙江 杭州 电信
高级用户
★★
积分 537
发帖 219
注册 2007-08-04 09:43
19年会员
UID 94620
性别 男
来自 杭州--半山
状态 离线
我刚才未考虑3位数,等我在改一下

[ Last edited by junchen2 on 2007-10-20 at 09:55 PM ]
论坛跳转: