|
dhlmdsnw
初级用户
积分 127
发帖 59
注册 2008-1-29
状态 离线
|
『楼 主』:
[求助]通过原始文本文件转换成另一种格式的文本文件
我这边有一个原始文本文件:01067-01090800-080122-01.txt,下面简称a
要把里面的内容换成另一种文本文件的格式:140820080122001.txt,下面简称b
如何批处理操作?——恳请各位大虾帮忙。。。。不胜感谢!
注意几点:
1.b文件字节不能有变化,即使是后面的空白,也要保留。
2.文件名中都包含当天日期的信息,如080122或者20080122
3.b文件中的最后一行是汇总行:只有三个地方有变动,一个是顺序号:8,一个是汇总数据:17750,一个是汇总编号:7。——很容易看出来的——其他都不变。a文本文件如下:
1147666 1407002601001238877 000000000270200 352201197511250011 林书文 20080122000106701080001003 797503 01090800
1147669 1407002501000591238 000000000250000 352226197308020023 蒋璟 20080122000106701080000977 797503 01090800
1147670 1407002501000591238 000000000250000 352226197308020023 蒋璟 20080122000106701080000981 797503 01090800
1147671 1407002601001236701 000000000254800 352221196007114118 黄尚灯 20080122000106701080000945 797503 01090800
1147672 1407002501000591114 000000000250000 352202800608331 陈爱国 20080122000106701080000931 797503 01090800
1147673 1407002501000591114 000000000250000 352202800608331 陈爱国 20080122000106701080000963 797503 01090800
1148256 1407700601101953789 000000000250000 352201197301142639 吴丽玉 20080122000106701080001017 797503 01090800
b文本文件如下:
21408000502021407002601001238877300000100000000000270200000000000000000011 000000000林书文
21408000502021407002501000591238300000200000000000250000000000000000000011 000000001蒋璟
21408000502021407002501000591238300000300000000000250000000000000000000011 000000002蒋璟
21408000502021407002601001236701300000400000000000254800000000000000000011 000000003黄尚灯
21408000502021407002501000591114300000500000000000250000000000000000000011 000000004陈爱国
21408000502021407002501000591114300000600000000000250000000000000000000011 000000005陈爱国
21408000502021407700601101953789300000700000000000250000000000000000000011 000000006吴丽玉
11408000502021408010011200362414300000800000000001775000000000000000000072
|
|
2008-1-29 02:08 |
|
|
HAT
版主
积分 9023
发帖 5017
注册 2007-5-31
状态 离线
|
『第
2 楼』:
资质愚钝,实在看不出a、b两个文件的数据有什么联系。
|
|
2008-1-29 12:26 |
|
|
dhlmdsnw
初级用户
积分 127
发帖 59
注册 2008-1-29
状态 离线
|
『第
3 楼』:
不好意思,可能是我没讲清楚
b文件中每一行(除了最后一行)前面的:140800050202是固定的,后面1407002601001238877是变动的,来源于a文件,再后面的3是固定的,再后面的
000001代表流水号,把它看成行号也可,如果是第11行,那么表达为000011,再后面的00是固定的,再后面的000000000270200是变动的,来源于a文件,再后面的00000000000000000011 (包括空白)都是固定的,再后面的:000000000又是一个流水号,规则跟前一个一样,只不过这个流水号是从0开始的。最后的:林书文,是变动的,来源于a文件。
不知道这样讲可以清楚吗?——希望各位大大帮帮新人丫。。。谢了先!!!
|
|
2008-1-29 14:16 |
|
|
dhlmdsnw
初级用户
积分 127
发帖 59
注册 2008-1-29
状态 离线
|
『第
4 楼』:
对了b文件中林书文后面的空白 也是要保留的,如果是四个字的人名,那么占用空白,也就是说“人名+空白”所占用的总数是不变的,我不知道这个“总数”在文本文件中是不是字节的概念,但是有一个方法可以验证,就是Ctrl+a全选,全选后每一行都被蓝色覆盖的满满的每有留一点空白的意思。
b文件中最后一行汇总行除了我说的那3个地方有变动外,其他的文本都不变。
在此先谢谢二楼大虾的关注。。。
|
|
2008-1-29 14:25 |
|
|
dhlmdsnw
初级用户
积分 127
发帖 59
注册 2008-1-29
状态 离线
|
『第
5 楼』:
二楼的大虾有QQ吗?——我可加你,然后把文件传过去给你啊。。。
五颗星耶。。。肯定是不世出的高手啊。。。。
|
|
2008-1-29 14:32 |
|
|
dhlmdsnw
初级用户
积分 127
发帖 59
注册 2008-1-29
状态 离线
|
『第
6 楼』:
再次提醒:a文件的每一行都是从1147开始的,在第二个1147的前面有一个黑色高亮的小方块(类似于光标固定往右拖一个字节的效果,只不过它是黑色的)来做为分隔符。——实在不好意思,第一次发帖,难免忘东忘西的。。。请各位位大大原谅则个。。。
|
|
2008-1-29 14:46 |
|
|
terse
银牌会员
积分 2404
发帖 946
注册 2005-9-8
状态 离线
|
『第
7 楼』:
上面B文件最后一行没处理 不知道是不是这个意思
@echo off
set m=0
setlocal enabledelayedexpansion
for /f "tokens=2,3,5" %%i in (a.txt) do (
set/a n+=1
set src1=%%i
set src2=%%j
set src3=%%k
set var=00000!n!
set var=!var:~-6!
set vcr=00000000!m!
set vcr=!vcr:~-9!
>>b.txt echo.140800050202!src1!3!var!00!src2!000000000000000011 !vcr!!src3!
set/a m+=1
)
pause
|
简单!简单!再简单! |
|
2008-1-29 17:34 |
|
|
flying008
中级用户
积分 245
发帖 103
注册 2006-6-30
状态 离线
|
『第
8 楼』:
变量延迟循环变量 ……让偶够学一阵的了……
|
|
2008-1-29 17:56 |
|
|
dhlmdsnw
初级用户
积分 127
发帖 59
注册 2008-1-29
状态 离线
|
『第
9 楼』:
哇,7楼的大大好厉害哦。。。基本已经有模型。。。
不要怪我贪心哦,还是有三个问题:
1.人名为两个字时如“蒋璟”,我在Ctrl+C全选时发现,后面会出现两个字节的空白,也就说格式与其他的不一致,请帮助调成一致。另外请考虑“人名”是变动的情况下如何也能保持一致,(例如:四个字、甚至出现外国人名字时的情况)。
2.b文件名是否能调成"14080005022080129001.txt",其中14080005022是固定的,080129是变动的,体现当天日期(例如:明天30号,就生成14080005022080130001.txt,如果当天是2月1号就生成14080005022080201001.txt),最后的001是流水号,代表我同一天做了这种同样的操作做了几次(例如:我的a1文件生成了b1,那么b1的文件名就是14080005022080130001.txt,接着我又用a2的文件生成了b2,那么b2的文件名就是14080005022080130002.txt)
3.当然还是恳请各位大大帮助把最后汇总的一行添加进文件中。
再次感谢7楼的大虾帮我解决了很大的一部分麻烦,고 맙 습 니 다 !(谢谢!)
请各位大大再展神威啊。。。。。
谢了先!
|
|
2008-1-29 21:03 |
|
|
dhlmdsnw
初级用户
积分 127
发帖 59
注册 2008-1-29
状态 离线
|
『第
10 楼』:
再次补充:对于b的文件名最后的流水号能和a的文件名的流水号(a文件名最后两个"01")保持一致就好了,只不过b是用三位数如001来做流水号,而a是用两位数01来做流水号。~~唉。。。真不知道各位大大还没碰到我这种新手了。。。实在不好意思,各位大大加油啊。。。。
|
|
2008-1-29 21:13 |
|
|
terse
银牌会员
积分 2404
发帖 946
注册 2005-9-8
状态 离线
|
『第
11 楼』:
你把B.TXT换成14080005022%date:~0,4%%date:~5,2%%date:~8,2%.TXT就是固定号加日期名了 至于00X序列如果是一次处理多个文件还是可以的,单独运行那就不行,还有最后一行的信息是从那里来的你都没说清楚啊
|
简单!简单!再简单! |
|
2008-1-29 21:49 |
|
|
dhlmdsnw
初级用户
积分 127
发帖 59
注册 2008-1-29
状态 离线
|
『第
12 楼』:
先回复11楼大大的,b文件中的最后一行是汇总行,在这个例子中只有三个地方有变动,一个是顺序号:8,一个是汇总数据:17750,一个是汇总编号:7。也就是说前面114080005020214080100112003624143是固定的,后面的000008是变动的,是前面一行000007流水号往下填的(例如:前面一行是000011,后面一行这个地方就是000012,如果前面一行是000111,那这个地方就变成000112),再后面的00是固定的,而后面的00000000177500又是变动的,00000000177500是前面所有行对应位置数据的汇总数如(第1行对应位置的数据是000000000270200+第1行对应位置的数据是000000000250000+....+第7行对应位置的数据是000000000250000=00000000177500),再后面的000000000000000007是变动的,用来表示前面总共有几行(例如:除最后一行外,前面总共有100行,那这个位置数据就该为000000000000000100),最后的2 (包括空白)都是固定的。——谢谢11楼大大的关注与建议。。。非常感谢!
|
|
2008-1-29 23:13 |
|
|
dhlmdsnw
初级用户
积分 127
发帖 59
注册 2008-1-29
状态 离线
|
『第
13 楼』:
试了11楼大虾的代码,果然非常棒,有一个小问题,还请帮助解决:我需要的日期格式是080129,用了大大的代码是出现20080129能否把前面的20去掉呢?再次感谢各位大大的关注。。。。
|
|
2008-1-29 23:21 |
|
|
zh159
金牌会员
积分 3687
发帖 1467
注册 2005-8-8
状态 离线
|
『第
14 楼』:
Quote: | Originally posted by dhlmdsnw at 2008-1-29 23:21:
试了11楼大虾的代码,果然非常棒,有一个小问题,还请帮助解决:我需要的日期格式是080129,用了大大的代码是出现20080129能否把前面的20去掉呢?再次感谢各位大大的关注。。。。 |
|
%date:~0,4%改为%date:~2,2%
|
|
|
2008-1-29 23:24 |
|
|
dhlmdsnw
初级用户
积分 127
发帖 59
注册 2008-1-29
状态 离线
|
『第
15 楼』:
哇噻,大虾啊。。。谢谢14楼的大虾。。。又推进了一步了。。。非常感谢!!!
还请继续关注啊。。。。
小妹在此谢过各位大大了。。。
我快看到胜利的曙光了。。。
果然藏龙卧虎啊。。。
努力学习各位的精华。。。。
|
|
2008-1-30 00:26 |
|