中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [求助]删除文本文件中的特殊字符但保持格式不变
« [1] [2] »
作者:
标题: [求助]删除文本文件中的特殊字符但保持格式不变 上一主题 | 下一主题
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
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: