|
dhlmdsnw
初级用户
积分 127
发帖 59
注册 2008-1-29
状态 离线
|
『楼 主』:
[求助]删除文本文件中的特殊字符但保持格式不变
有一原始文本文件,简称a,文件名:01067-01090800-080122-01.txt,文件内容及格式如下:
1147666 1307002601001238877 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 13-7002501000591114 000000000250000 352202800608331 陈爱国 20080122000106701080000963 797503 01090800
1148256 1407700601101953789 000000000250000 352201197301142639 吴丽玉 20080122000106701080001017 797503 01090800
a文件的每一行都是从114开始的,在第二个114的前面有一个黑色高亮的小方块(类似于光标固定往右拖一个字节的效果,只不过它是黑色的)来做为分隔符。
现在要求如下:每一行前面1147666 (包括空白)与原文件相同,再后面1307002601001238877有变动(要求是这样变动的:如果前面是以13或者13-开头的,请删掉13或者13-,后面的数据往前整,但要在该行的末尾补上相应的空白数,如删掉的是13,补两个空白,如删掉的是13-,补三个空白。如果前面不是以13或者13-开头的则保持不变。),再后面的所有数据都不变。最后生成一个新的文本文件,简称b,文件名为:sm080129。文件名中前面的sm固定不变,后面的080129是当天日期。在本例中第一行有一个13,第六行有一个13-。
恳请各位大侠再次出手相助。。。不胜感谢!!!
|
|
2008-1-29 23:46 |
|
|
dhlmdsnw
初级用户
积分 127
发帖 59
注册 2008-1-29
状态 离线
|
『第
2 楼』:
sorry,描述错了一个地方,删除了13或者13-以后,不是在该行的末尾补空白,是后面的数据往上整,再补上二至三个空白,例如本例第一行:1307002601001238877,删除13后是07002601001238877 (后面补了两个空白)
再例如本例的第六行:13-7002501000591114,删除13-后是7002501000591114 (后面补了三个空白)——各位大虾都来帮忙试试手啊。。。谢了先!
|
|
2008-1-29 23:57 |
|
|
dhlmdsnw
初级用户
积分 127
发帖 59
注册 2008-1-29
状态 离线
|
『第
3 楼』:
各位大大怎么都不帮我看看啊?是不屑出手还是有其他问题啊。。。如果是我没有描述清楚,请告诉我,我会继续说明的。。。版主救命啊。。。。小妹这里谢了先!
|
|
2008-1-30 14:49 |
|
|
fastslz
铂金会员
DOS一根葱
积分 5493
发帖 2315
注册 2006-5-1 来自 上海
状态 离线
|
『第
4 楼』:
可能是1307002601001238877也有可能出现这个13-7002501000591114
没有规律版主也帮不了你,写出不具通用性代码给你也是吃力不讨好。
|
第一高手 第二高手
我的小站
|
|
2008-1-30 15:27 |
|
|
qzwqzw
银牌会员
天的白色影子
积分 2342
发帖 635
注册 2004-3-6
状态 离线
|
『第
5 楼』:
对于这种一次性操作的文件
我会选用Editplus或者UltraEdit的正则替换
而不是用批处理
|
|
2008-1-30 15:46 |
|
|
dhlmdsnw
初级用户
积分 127
发帖 59
注册 2008-1-29
状态 离线
|
『第
6 楼』:
回复4楼的大大,先感谢你的关注,但我个人认为应该是有规律的,就是a文件要转换为b文件,但是有一个条件需要判断一下:就是在每一行的固定位置是否出现13或者13-,如果出现,则把13或者13-删除,后面的数据往前整,在该位置后面的第一个空白处补上相应的空白数(例如删掉的是13,那么补两个空白,如果删掉的是13-,那么就补三个空白),注意不是在该行的末尾补上相应的空白数!
还可以用替换来理解:就是如果出现13或者13-,那么用相应的空白来替代,只不过这个空白不是放在对应的位置,而是放在该位置后面第一个出现空白的地方。
如果每一行固定位置不是13或者13-,那么该行保持不变。
最后就是b文件的命名需要体现当天日期。
还是恳请各位大大再帮小妹多多看看,谢了先!
|
|
2008-1-30 17:21 |
|
|
dhlmdsnw
初级用户
积分 127
发帖 59
注册 2008-1-29
状态 离线
|
『第
7 楼』:
回复5楼的大大,说实在的你说的两种东东我都是第一次听说,只要你能帮我解决,无论什么样的方法我都愿意尝试的,当然首先大大的得有耐心教我啊。。。——能写一个具体的步骤给我吗?——非常感谢你的关注!
还请继续给我支持。。。
|
|
2008-1-30 17:24 |
|
|
terse
银牌会员
积分 2404
发帖 946
注册 2005-9-8
状态 离线
|
『第
8 楼』:
@echo off
setlocal enabledelayedexpansion
for /f "tokens=1,2*" %%i in (a01.txt) do (
set src=%%i
set src1=%%j
if "!src1:~0,2!" == "13" set src1=!src1:~2!
if "!src1:~0,1!" == "-" set src1=!src1:~1!
>>sm%date:~0,4%%date:~5,2%%date:~8,2%.txt echo !src!!src1!%%k
)
pause
[ Last edited by terse on 2008-1-30 at 10:26 PM ]
|
简单!简单!再简单! |
|
2008-1-30 22:19 |
|
|
dhlmdsnw
初级用户
积分 127
发帖 59
注册 2008-1-29
状态 离线
|
『第
9 楼』:
哇噻。。。。大大大。。。大虾。。。你什么时候过来的,通知一声嘛。。。我还在努力测试你说的外国名字呢。。。刚给你回了。。。。还没试试代码,但看到大大简直是感激涕零了。。。。小妹这就试试去。。。大大出手。。。简直。。。。唉。。。无语了。。。测试先。。。嘿嘿。。。。
|
|
2008-1-30 22:25 |
|
|
terse
银牌会员
积分 2404
发帖 946
注册 2005-9-8
状态 离线
|
『第
10 楼』:
你说的外国名 因为有空格 所以没办法
|
简单!简单!再简单! |
|
2008-1-30 22:28 |
|
|
dhlmdsnw
初级用户
积分 127
发帖 59
注册 2008-1-29
状态 离线
|
『第
11 楼』:
大大,我今晚不用睡觉了,简直太兴奋了。。。。天哪。。。我要马上去系统的学习批处理。。。不懂的地方,大大可要教我啊。。。没得说了。。。一次通过。。。简直是神了。。。。明天我的那些同事会睁大着眼睛。。。看我把它们一个个都秒杀了。。。然后她们会流着口水呆望着我。。。。就像我现在呆望着大大的五颗星。。。呵呵。。。。。大大我要去告诉全世界,哇噻,我的terse大大真的好厉害哦。。。。耶耶耶。。。。基本上所有的东东都可秒杀啊。。。嘿嘿。。。
|
|
2008-1-30 22:39 |
|
|
dhlmdsnw
初级用户
积分 127
发帖 59
注册 2008-1-29
状态 离线
|
『第
12 楼』:
唉,看我这兴奋的,连最基本的礼貌都忘了:고 맙 습 니 다 !
terse大大,回头我如果还有帖,你可别忘了关注哦。。。耶耶耶。。。。
再次感谢关注本帖的所有大虾。。。有了你们的关注。。。我们这些新人才有希望啊!非常感谢!
|
|
2008-1-30 22:43 |
|
|
dhlmdsnw
初级用户
积分 127
发帖 59
注册 2008-1-29
状态 离线
|
『第
13 楼』:
大大今天在公司试了一下,出现错误了。。我双击完批处理命令DOS窗口出现下面的提示:'00-0.txt' 不是内部或外部命令,也不是可运行的程序或批处理文件。这样提示出现了十多行,然后生成了一个文件名为:sm星期四。的文件,但没有扩展名(我没有隐藏文件扩展名),我把它添加上.txt的扩展名打开后,里面是空空的。——我不知道这是不是跟电脑有关,我在家用的是XP,在公司用的是2000。
还请再帮助看看。。。。谢了先!
|
|
2008-1-31 11:55 |
|
|
dhlmdsnw
初级用户
积分 127
发帖 59
注册 2008-1-29
状态 离线
|
『第
14 楼』:
我弄整齐点,大大们容易看
原始文件如下:
1204120 13540901100139621 000000000250000 360424196403255318 周小荣 20080131000106301080003720 718456 02090400
1204412 13510501100178656 000000000109800 522725198207096013 陈德锋 20080131010106301070002361 718456 02090400
1204421 13512101100376604 000000000287800 352623197202250034 熊启林 20080131010106301070003431 718456 02090400
1204438 13531901100106746 000000000609800 350582197009282053 张慈爱 20080131010106301070005309 718456 02090400
1204440 13531500460005694 000000000441200 350582197903116033 林逸作 20080131010106301070005313 718456 02090400
1204476 13520900460000898 000000000229200 35052119820304451X 陈越明 20080131010106301070008444 718456 02090400
1204477 13520900460000898 000000000146800 35052119820304451X 陈越明 20080131010106301070008458 718456 02090400
1204478 6228480682158549217 000000000230900 350500197805131016 吴毓志 20080131010106301070009032 718456 02090400
1204479 9559980681087816614 000000000121300 350521197003264513 吴明杰 20080131010106301070007548 718456 02090400
1204480 9559980681087816614 000000000164400 350521197003264513 吴明杰 20080131010106301070007935 718456 02090400
1204481 9559980071104379814 000000000375200 350521690601453 周明海 20080131010106301070008412 718456 02090400
1204532 13520901100030907 000000000315900 350521197204164551 王惠民 20080131010106301060032660 718456 02090400
1204533 13521400460006275 000000000431000 350521197111201536 陈亚清 20080131010106301060031118 718456 02090400
1204534 9559980681813380216 000000000267600 350521740504453 陈桂林 20080131010106301060031827 718456 02090400
用terse大大代码转换后出现以下格式:
1204120 540901100139621 000000000250000 360424196403255318 周小荣 20080131000106301080003720 718456 02090400
1204412 510501100178656 000000000109800 522725198207096013 陈德锋 20080131010106301070002361 718456 02090400
1204421 512101100376604 000000000287800 352623197202250034 熊启林 20080131010106301070003431 718456 02090400
1204438 531901100106746 000000000609800 350582197009282053 张慈爱 20080131010106301070005309 718456 02090400
1204440 531500460005694 000000000441200 350582197903116033 林逸作 20080131010106301070005313 718456 02090400
1204476 520900460000898 000000000229200 35052119820304451X 陈越明 20080131010106301070008444 718456 02090400
1204477 520900460000898 000000000146800 35052119820304451X 陈越明 20080131010106301070008458 718456 02090400
1204478 6228480682158549217 000000000230900 350500197805131016 吴毓志 20080131010106301070009032 718456 02090400
1204479 9559980681087816614 000000000121300 350521197003264513 吴明杰 20080131010106301070007548 718456 02090400
1204480 9559980681087816614 000000000164400 350521197003264513 吴明杰 20080131010106301070007935 718456 02090400
1204481 9559980071104379814 000000000375200 350521690601453 周明海 20080131010106301070008412 718456 02090400
1204532 520901100030907 000000000315900 350521197204164551 王惠民 20080131010106301060032660 718456 02090400
1204533 521400460006275 000000000431000 350521197111201536 陈亚清 20080131010106301060031118 718456 02090400
1204534 9559980681813380216 000000000267600 350521740504453 陈桂林 20080131010106301060031827 718456 02090400
问题具体一点的描述是:出现13或者13-的是删除了,后面数据也往前整了,但在后面数据的第一个空白开始增加了4个空白,没有出现13或者13-的行,在后面数据的第一个空白位置也增加了2个空白。(本来应该要有的结果是出现13或者13-的行,后面数据的第一个空白开始增加相应的空白数。没有出现13或者13-的行,该行不变动。)
大大们再帮我看看啊。。。。
谢谢了!
|
|
2008-1-31 21:53 |
|
|
dhlmdsnw
初级用户
积分 127
发帖 59
注册 2008-1-29
状态 离线
|
『第
15 楼』:
补上原始文本(a文本文件)的规则如下:
序号 数据类型(字节) 名称 备注 累计字节
1 Char(25) 标志1 左对齐,右补空格 25
2 Char(30) 标志2 左对齐,右补空格 55
3 Char(15) 标志3 例如13.2(去掉小数点),右对齐,左补0 70
4 Char(6) 标志4 固定六个空格 76
5 Char(20) 标志5 左对齐,右补空格 96
6 Char(20) 标志6 左对齐,右补空格 116
7 Char(8) 标志7 YYYYMMDD 124
8 Char(1) 标志8 0-代收,1-代付 125
9 Char(1) 标志9 0-首期,1-续期 126
10 Char(20) 标志10 左对齐,右补空格 146
11 Char(20) 标志11 左对齐,右补空格 166
12 Char(20) 标志12 左对齐,右补空格 186
13 Char(40) 标志13 左对齐,右补空格 226
供大大们参考。。。再次多谢各位大大的关注。。。
继续期待中。。。。
[ Last edited by dhlmdsnw on 2008-2-1 at 02:11 AM ]
|
|
2008-2-1 02:10 |
|