中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [求助]删除文本文件中的特殊字符但保持格式不变
« [1] [2] »
作者:
标题: [求助]删除文本文件中的特殊字符但保持格式不变 上一主题 | 下一主题
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 16 楼』:  

terse的代码错误原因是因为你的
第2部分字符的长度是不固定的,有些62,95的后面多2位。
(你最开始给的代码没有体现出这个特点,你的14的和13的一样长=.=)
但是感觉13的那些行应该对的呀~


建议你还是用VBS脚本,和VBA的代码差不多。不用打开EXCEL。

方法和那帖子一样。。。因为你格式固定,所以你判断第mid(linestr,26,2)
是不是"13",是替换成空,将55位那个空格换成3个空格,这样就不了1位。
再判断mid(linestr,26,1)是不是"-",是同样替换成空格,将55位的空格替换成2个空格,就补了1位。

2008-2-1 02:26
查看资料  发短消息 网志   编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 17 楼』:  

把这个问题给你写个VBS脚本的例子:

Example.vbs:

  Quote:
Const ForReading = 1       '设定打开文本方式为读取
Const ForWriting = 2       '设定打开文本方式为写入
Const ForAppending = 8     '设定打开文本方式为追加

Const InFile = "a.txt"     '设定打开的文本

Dim StrLine,OutStr

Set objFSO = CreateObject("Scripting.FileSystemObject")  '引用FSO对象,读写文件要用到的
Set objFile = objFSO.OpenTextFile(InFile, ForReading)    '以读取方式打开InFile

Do Until objFile.AtEndOfStream
    StrLine = objFile.ReadLine       '读取一行
   
If Mid(StrLine,26,3) = "13-" Then
        
StrLine = Left(StrLine,25) & Mid(StrLine,29,27) & "   " & Mid(StrLine,56)
   
ElseIf Mid(StrLine,26,2) = "13" Then
        
StrLine = Left(StrLine,25) & Mid(StrLine,28,28) & "  " & Mid(StrLine,56)
   
End If
   
OutStr = OutStr & StrLine & vbCrLf
Loop

objFile.Close             '关闭文件对象


OutFile = "sm" & FormatDate(Date) & ".txt"
Set objFile = objFSO.OpenTextFile(OutFile, ForWriting,True)  '以写入方式打开OutFile
objFile.Write OutStr
objFile.Close             '关闭文件对象

Set objFile = Nothing
Set
objFSO = Nothing

Function
FormatDate(tDate)
   
FormatDate = Right(Year(tDate),2) & AddZero(Month(tDate)) & AddZero(Day(tDate))
End Function

Function
AddZero(sNum)
   
Addzero = Right("0" & sNum,2)
End Function

脚本运行的结果表明,你的第一帖里的名字后面的空格少一位,不知道是不是这样。。。

2008-2-1 02:34
查看资料  发短消息 网志   编辑帖子  回复  引用回复
dhlmdsnw
初级用户





积分 127
发帖 59
注册 2008-1-29
状态 离线
『第 18 楼』:  

看了slore大大回的帖,感觉自己真是太惭愧了。。。大大还在帮助我写代码。。。我自己却因为太冷,窝进被子了。。。——以后一定要学习slore大大这种诲人不倦,努力钻研的精神。。。
用了大大的代码,已经生成了我需要的格式(与我以前用VBA生成的格式是一样的),能否达到机器的要求,要下午才能知道。。。应该没问题。。。下午我会答复是否可以的。。。还请大大继续关注。。。。谢了先!

真的非常感谢slore大大的照顾!——大大也要继续关注我其他的帖子啊(后面还会再发的,因为现在正在努力学习中。。。。)

同时,我也为自己的知识欠缺感到惭愧。。。居然之前都不知道VBS,现在终于能够懂得VBA也能够还是能够有更多的应用,因为我看到大大写的vbs,感觉比较容易懂,跟我的VBA有共通的地方。

希望大大们继续关注我以后发的其他帖子。。。。

고 맙 습 니 다 !

2008-2-1 12:44
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
junchen2
高级用户





积分 537
发帖 219
注册 2007-8-4
来自 杭州--半山
状态 离线
『第 19 楼』:  

gawk "{sub(/ 13-/,\"    \");sub(/ 13/,\"   \");print $0}" test.txt

其实一句话就可以基本搞定,^ ^

http://www.vkill.net/tools.html
里面有gawk.exe工具,这个就是处理格式化输出的,是它的强项。

2008-2-1 13:23
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 20 楼』:  



  Quote:
Originally posted by junchen2 at 2008-2-1 13:23:
gawk "{sub(/ 13-/,\"    \");sub(/ 13/,\"   \");print $0}" test.txt

其实一句话就可以基本搞定,^ ^

http://www.vkill.net/tools.html
里面 ...

3方工具是会简化很多。


那我把a.txt作为参数。。。

1.vbs a.txt
不知道算不算半句话?

2008-2-1 13:27
查看资料  发短消息 网志   编辑帖子  回复  引用回复
junchen2
高级用户





积分 537
发帖 219
注册 2007-8-4
来自 杭州--半山
状态 离线
『第 21 楼』:  

当然神在心中吗!你说是就是了。

2008-2-1 13:32
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
dhlmdsnw
初级用户





积分 127
发帖 59
注册 2008-1-29
状态 离线
『第 22 楼』:  

先报告slore大大,你的代码没问题,用得效果很好!——实现秒杀了。。。嘿嘿。。。고 맙 습 니 다 !

另外,谢谢19楼的大大,我在测试中。。我也希望能够学到更多精华的东西。。。也希望大大回头能继续关注我其他的帖子,今晚还会再发一帖的(帖子标题已经想好了,先定为:据原始文件的固定标志给目标文件添加相应标志。。。嘿嘿。。。)

没办法人笨啊。。。学习中。。。

感谢大家支持与关注,本问题已解决,算是结帖了。
고 맙 습 니 다 !

2008-2-1 18:56
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
terse
银牌会员





积分 2404
发帖 946
注册 2005-9-8
状态 离线
『第 23 楼』:  



  Quote:
Originally posted by dhlmdsnw at 2008-1-31 21:53:
我弄整齐点,大大们容易看
原始文件如下:
1204120                  13540901100139621             000000000250000      360424196403255318  周小荣              20080131000106301 ...

其实 你改一下
echo !src!!src1:~0,30!%%k 就OK了



简单!简单!再简单!
2008-2-2 22:05
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
dhlmdsnw
初级用户





积分 127
发帖 59
注册 2008-1-29
状态 离线
『第 24 楼』:  

测试了。。。可以滴。。。谢谢terse大大。。。这两天怎么都没见你啊?

2008-2-3 02:04
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
pinghu
中级用户





积分 307
发帖 130
注册 2008-2-1
状态 离线
『第 25 楼』:  

你在写字板粘贴试试

2008-2-3 16:36
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


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



论坛跳转: