Board logo

标题: [VBS]如何把文本中回车转换成&vbcr&字符 [打印本页]

作者: kich     时间: 2007-4-14 10:02    标题: [VBS]如何把文本中回车转换成&vbcr&字符

如何把文本中回车转换成&vbcr&字符??
比如用ReadAll读了个文本的内容,假设是:

ff
fukkk
eee


然后把转换成:
ff&vbcr&fukkk&vbcr&eee

我用Asc函数转换,但转换成这样的:
ff
&vbcr&fukkk
&vbcr&eee

请指教啊!谢谢
作者: baomaboy     时间: 2007-4-14 11:40


  Quote:
Originally posted by kich at 2007-4-14 10:02:
如何把文本中回车转换成&vbcr&字符??
比如用ReadAll读了个文本的内容,假设是:

ff
fukkk
eee


然后把转换成:
ff&vbcr&fukkk&vbcr&eee

我 ...

你所谓的回车,其实是回车+换行,如果没猜错的话,你只是替换了回车,还剩换行在呢,当然是那效果。
作者: kich     时间: 2007-4-14 11:57
哦,对的,恩,谢谢了!好象是这么做的!!

问一下,把一篇TXT文字(里面可能会有特殊符号和回车)定义成一个很长的字符,然后放到VBS脚本里做为一个常数,怎么做啊??
作者: baomaboy     时间: 2007-4-14 12:13


  Quote:
Originally posted by kich at 2007-4-14 11:57:
哦,对的,恩,谢谢了!好象是这么做的!!

问一下,把一篇TXT文字(里面可能会有特殊符号和回车)定义成一个很长的字符,然后放到VBS脚本里做为一个常数,怎么做啊??

没看明白你的意思.
作者: kich     时间: 2007-4-15 00:13
就是说,如果我有一大段文字,我需要它作为一个常量,然后我准备输入到其他文本里(因为其他文本要用到这些文字).比如说,一个HTML的小段文字,我要把它作为一个常量输出,但它里面有特殊字符,怎么解决??(回车和引号,不能把这一大段作为一个常量吧,因为有回车在里面嘛)

不知道有没有说明白!!
作者: baomaboy     时间: 2007-4-15 00:20
引号 可以用chr(34)

不如你再说明白一些你的最终目的,比如这样做是为了"加密" 或其他的
作者: kich     时间: 2007-4-15 00:26
我的目的:
我是想做一个中英文双字幕的字幕文件,但首先要对这些字幕做格式说明,因为我要对很多电影的字幕做操作,而他们的格式都是一样的,所以,这些定义的格式,可以把它做成一个常量放在VBS文件里,然后,分别调入中英文字幕再稍加处理,然后在这些中英文字幕的最前面加上定义的格式说明(就是那个常量),但这个常量是个比较长的文本段,有十几行,没办法做成一个常量.
为更表达更清晰,把那个格式定义帖出来放在下面,看看怎么把这段文本做成一个常量呢?
[Script Info]
;本字幕为英语在上,汉语在下,视频内部有时会出现英语.
ScriptType: v4.00
Collisions: Normal
PlayResX: 384
PlayResY: 288
Timer: 100.0000

[V4 Styles]
;汉字样式
Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, TertiaryColour, BackColour, Bold, Italic, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, AlphaLevel, Encoding
Style: Default,Arial,17,&Hffffff,&H00ffff,&H000000,&H000000,-1,0,1,2,0,2,20,20,21,0,1

;英语样式
Style: Default2,Arial,12,&Hffffff,&H00ffff,&H000000,&H000000,-1,0,1,2,0,2,20,20,5,0,1

;当视频内置英文字幕时,则用次汉语字幕样式,以至不会隐藏掉视频里的英语字幕.
Style: Default3,Arial,15,&Hffffff,&H00ffff,&H000000,&H000000,-1,0,1,2,0,2,20,20,5,0,1
当然,有时候还涉及到引号!
Thx

[ Last edited by kich on 2007-4-15 at 12:27 AM ]
作者: kich     时间: 2007-4-15 00:31
我以前的做法是把这段文字作成一个文本文件放在那,然后用ReadAll调用,但这就要求这个文本文件必须存在,很麻烦,一个脚本+一个文件!
如果把这段文字定义成常量放在VBS里,这样就省事多了,可以随便拷贝了!!
作者: baomaboy     时间: 2007-4-15 00:55


  Quote:
Originally posted by kich at 2007-4-15 00:31:
我以前的做法是把这段文字作成一个文本文件放在那,然后用ReadAll调用,但这就要求这个文本文件必须存在,很麻烦,一个脚本+一个文件!
如果把这段文字定义成常量放在VBS里,这样就省事多了,可以随便拷贝了!!

遇到阻碍单行的符号就用替换的方法吧,要输出时再还原,呵呵 几乎所有的病毒都是用此法加密自身为单行的,替换成一些绝对不会有冲突的比如chr(18)、chr(30)。。。

[ Last edited by baomaboy on 2007-4-15 at 01:05 AM ]
作者: kich     时间: 2007-4-15 01:07
哦,原来就是用一个不会冲突的字符代替啊,那就用一些特殊字符来替换吗?
那回车+换行怎么换!
我是想做一个专门用于转换的VBS文件,把文件拖上去,然后就输出一个替换过的文件!
那么这个VBS在处理回车+换行,应该怎么写程序呢?
Replace(content,chr(13)+char(10),cha(18))??
作者: baomaboy     时间: 2007-4-15 01:38


  Quote:
Originally posted by kich at 2007-4-15 01:07:
哦,原来就是用一个不会冲突的字符代替啊,那就用一些特殊字符来替换吗?
那回车+换行怎么换!
我是想做一个专门用于转换的VBS文件,把文件拖上去,然 ...

Replace(content,chr(13)+char(10),cha(18))??
分别替换因为个别时回车和换行不连接,那Replace(content,chr(13)+char(10),cha(18))失效了。
Replace(content,chr(13),cha(28))
Replace(content,chr(13),cha(29))
Replace(content,chr(34),cha(18)) 替换" 因为 " 在VBS中用于注释 变单行后 " 之后全变成注释了 所以必须换掉。

想拖到上面输出:

content=readallstr
content=Replace(content,chr(13),cha(28))
content=Replace(content,chr(13),cha(29))
content=Replace(content,chr(34),cha(18))
fso.输出content

原理是这样的 实际操作中大多用 For len(content) 遍历来替换的

[ Last edited by baomaboy on 2007-4-15 at 01:39 AM ]
作者: kich     时间: 2007-4-15 04:00
哦,原来是这样,晚上我回去试试看到底是怎么才能输出我想要的东西!!
谢谢指教!有什么不明白,我还来这里问问看啊!!
Thx
作者: slore     时间: 2007-4-15 05:12
和单引不知道有什么关系,字符串里貌似只有""特殊罢了。
作者: kich     时间: 2007-4-15 23:21
有这样一个单引过滤好是好点我觉得!因为我想还转换其他的文本的呢!!

呵呵,谢谢各位指教!
作者: slore     时间: 2007-4-16 00:13
"我是单引号 '你把我当字符串我没有被注释!"
你看上面的能被注释掉么?
作者: kich     时间: 2007-4-16 01:38
呵呵,太高深了,看不大明白,那究竟应该怎么做呢?侠哥!
作者: slore     时间: 2007-4-16 02:26
把你那段作为字符串有条件的……

一行最多255个然后用 _ 分行~分行貌似也有限制。

你要转一段文字作为字符串。

ScriptInfo = "[Script Info]" & vbcrlf & ";本字幕为英语在上,汉语在下,视频内部有时会出现英语." _
& vbcrlf & "ScriptType: v4.00" & vbcrlf & "Collisions: Normal" & vbcrlf _
& "PlayResX: 384" & vbcrlf & "PlayResY: 288" & vbcrlf & "Timer: 100.0000"

msgbox ScriptInfo

然后再定义V4Styles,甚至里面的样式,比如:

;汉字样式
Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, TertiaryColour, BackColour, Bold, Italic, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, AlphaLevel, Encoding
Style: Default,Arial,17,&Hffffff,&H00ffff,&H000000,&H000000,-1,0,1,2,0,2,20,20,21,0,1

也可以单独定义成几块……

用的时候

ScriptInfo & V4Styles合并就可以了。。。。替换每行字符串中的"为""然后前后都加上引号.然后将回车替换成字符串 " & vbCrLf & "

字符串长度你自己限制下吧
作者: kich     时间: 2007-4-16 03:53
我想做成个脚本,就是专门转换大段文本成一个很长的字符串(可以用len来检查有多长),按照楼上slore的说法,我这个就是人工来分析字符了,但面对很长的文章的时候(比如说长篇html事,那操作起来就不现实了),那接下来应该怎么解决呢???

谢谢!!呵呵,新手,多指教!!
作者: baomaboy     时间: 2007-4-16 05:23


  Quote:
Originally posted by slore at 2007-4-15 05:12:
和单引不知道有什么关系,字符串里貌似只有""特殊罢了。

slore说的不错,
转换单引的本意是我在加密过程中用到的,加密为一行后若VBS代码中含有此符号则后面的全被注释掉了,想想其实与主题本无关,因为要转换的字符并非需要要执行的程序码,而是实字符串.

[ Last edited by baomaboy on 2007-4-16 at 05:50 AM ]