最近受朋友之托帮忙写个筛选数据的脚本,由于筛选过程涉及不少键盘鼠标模拟操作,以前没了解过这方面内容,查了一下常用做法,最终决定采用vbs脚本语言,以前也没用过,大概扫了一下语法就开干。数据使用txt文本保存的,通常数据之间都是用制表符“\t”或者其他空格什么分割的;也没多想,就用空格分隔试了一下,文件读取按行读取后分割出现了问题,输出没分割开,后来换用“\t”还是不行。
于是开始考虑是否使用的分隔符部不对,文件中数据的分割使用了其他特殊字符,所以用UE打开十六进制查看到底用的什么分隔符,回车换行0D(回车十六进制代码) 0A(换行符十六进制代码),分割09(制表符的十六进制代码)就是制表符分割的!这个时候就才开始考虑是不是代码本身的问题,查了资料才发现vbs脚本语言没有像其他语言一样使用 \ 作为转义符,而是使用 " 作为转义符,而且只有"" = " 这一个转义,也就是说"n也不会转义成换行,不过还好vbs提供了特殊字符常量,使用起来还是很方便的(下附vbs特殊字符转义)。
常见 Vb 说明
-------------------------------------------------------------
\\ "\" (反斜杠)
\n VbCrLf (换行符,用来表示重起一行)
\t VbTab (水平制表符)
\b Chr(8) (退格符)
\r vbCr (回车符)
\' "'" (单引号)
\" "" (双引号)
只能说惯性思维害死人,当初一直认为是文件分割编码的问题,纠结了很久,蓦然回首真相却在灯火阑珊处,是自己惯性的认为\是转义符的问题,没有考虑vbs语言可能有不同的定义,所以钻了半天牛角尖;以此为戒。
在上网查资料的过程中,还看到了一则有意思的常识,也写下来,警醒自己在考虑任何问题的时候都应该考虑客观环境,并确认前提条件,不要为惯性思维束缚。
顾名思义,换行符就是另起一行,回车符就是回到一行的开头,所以我们平时编写文件的回车符应该确切来说叫做回车换行符
'\n' 10 换行(newline)
'\r' 13 回车(return)
也可以表示为'\x0a'和'\x0d'.(16进制)
在windows系统下,回车换行符号是"\r\n".但是在Linux等系统下是没有"\r"符号的。在解析文本或其他格式的文件内容时,常常要碰到判定回车换行的地方,这个时候就要注意既要判定"\r\n"又要判定"\n"。写程序时可能得到一行,将其进行trim掉'\r',这样能得到你所需要的string了。