中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-08-07 13:02
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [求助]删除文本文件中的特殊字符但保持格式不变 查看 2,992 回复 24
16 发表于 2008-02-01 02:26 ·  中国 陕西 西安 电信
铂金会员
★★★★
积分 5,212
发帖 2,478
注册 2007-02-08 23:39
19年会员
UID 79003
性别 男
状态 离线
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位。
17 发表于 2008-02-01 02:34 ·  中国 陕西 西安 电信
铂金会员
★★★★
积分 5,212
发帖 2,478
注册 2007-02-08 23:39
19年会员
UID 79003
性别 男
状态 离线
把这个问题给你写个VBS脚本的例子:

Example.vbs:

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


脚本运行的结果表明,你的第一帖里的名字后面的空格少一位,不知道是不是这样。。。
18 发表于 2008-02-01 12:44 ·  中国 福建 福州 联通
初级用户
★★
积分 127
发帖 59
注册 2008-01-29 01:05
18年会员
UID 109744
状态 离线
看了slore大大回的帖,感觉自己真是太惭愧了。。。大大还在帮助我写代码。。。我自己却因为太冷,窝进被子了。。。——以后一定要学习slore大大这种诲人不倦,努力钻研的精神。。。
用了大大的代码,已经生成了我需要的格式(与我以前用VBA生成的格式是一样的),能否达到机器的要求,要下午才能知道。。。应该没问题。。。下午我会答复是否可以的。。。还请大大继续关注。。。。谢了先!

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

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

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

고 맙 습 니 다 !
19 发表于 2008-02-01 13:23 ·  中国 浙江 杭州 电信
高级用户
★★
积分 537
发帖 219
注册 2007-08-04 09:43
19年会员
UID 94620
性别 男
来自 杭州--半山
状态 离线
gawk "{sub(/ 13-/,\" \");sub(/ 13/,\" \");print $0}" test.txt

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

http://www.vkill.net/tools.html
里面有gawk.exe工具,这个就是处理格式化输出的,是它的强项。
20 发表于 2008-02-01 13:27 ·  中国 陕西 西安 电信
铂金会员
★★★★
积分 5,212
发帖 2,478
注册 2007-02-08 23:39
19年会员
UID 79003
性别 男
状态 离线
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
不知道算不算半句话?
21 发表于 2008-02-01 13:32 ·  中国 浙江 杭州 电信
高级用户
★★
积分 537
发帖 219
注册 2007-08-04 09:43
19年会员
UID 94620
性别 男
来自 杭州--半山
状态 离线
当然神在心中吗!你说是就是了。
22 发表于 2008-02-01 18:56 ·  中国 福建 福州 联通
初级用户
★★
积分 127
发帖 59
注册 2008-01-29 01:05
18年会员
UID 109744
状态 离线
先报告slore大大,你的代码没问题,用得效果很好!——实现秒杀了。。。嘿嘿。。。고 맙 습 니 다 !

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

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

感谢大家支持与关注,本问题已解决,算是结帖了。
고 맙 습 니 다 !
23 发表于 2008-02-02 22:05 ·  中国 江苏 常州 电信
银牌会员
★★★
积分 2,404
发帖 946
注册 2005-09-08 13:44
20年会员
UID 42345
状态 离线
Originally posted by dhlmdsnw at 2008-1-31 21:53:
我弄整齐点,大大们容易看
原始文件如下:
1204120 13540901100139621 000000000250000 360424196403255318 周小荣 20080131000106301 ...

其实 你改一下
echo !src!!src1:~0,30!%%k 就OK了
简单!简单!再简单!
24 发表于 2008-02-03 02:04 ·  中国 福建 泉州 电信
初级用户
★★
积分 127
发帖 59
注册 2008-01-29 01:05
18年会员
UID 109744
状态 离线
测试了。。。可以滴。。。谢谢terse大大。。。这两天怎么都没见你啊?
25 发表于 2008-02-03 16:36 ·  中国 吉林 吉林市 联通
中级用户
★★
积分 307
发帖 130
注册 2008-02-01 21:29
18年会员
UID 109981
性别 男
状态 离线
你在写字板粘贴试试
论坛跳转: