新增检查sql脚本是否符合ANSI编码格式
'*******************************************************************
'作用:transfer转换文件编码格式
'参数含义:incode为传入的文件编码 outcode转换后的文件编码
'进行判断文件类型是否是ansi类型,如果不是,提供选择是否需要自动更新文件
'*******************************************************************
Function read(path)
'将Byte()数组转成String字符串
Dim ado, a(), i, n
Set ado = CreateObject("ADODB.Stream")
ado.Type = 1 : ado.Open
ado.LoadFromFile path
n = ado.Size - 1
ReDim a(n)
For i = 0 To n
a(i) = ChrW(AscB(ado.Read(1)))
Next
read = Join(a, "")
End Function Function is_valid_utf8(ByRef input) 'ByRef以提高效率
Dim s, re
Set re = New Regexp
s = "[\xC0-\xDF]([^\x80-\xBF]|$)"
s = s & "|[\xE0-\xEF].{0,1}([^\x80-\xBF]|$)"
s = s & "|[\xF0-\xF7].{0,2}([^\x80-\xBF]|$)"
s = s & "|[\xF8-\xFB].{0,3}([^\x80-\xBF]|$)"
s = s & "|[\xFC-\xFD].{0,4}([^\x80-\xBF]|$)"
s = s & "|[\xFE-\xFE].{0,5}([^\x80-\xBF]|$)"
s = s & "|[\x00-\x7F][\x80-\xBF]"
s = s & "|[\xC0-\xDF].[\x80-\xBF]"
s = s & "|[\xE0-\xEF]..[\x80-\xBF]"
s = s & "|[\xF0-\xF7]...[\x80-\xBF]"
s = s & "|[\xF8-\xFB]....[\x80-\xBF]"
s = s & "|[\xFC-\xFD].....[\x80-\xBF]"
s = s & "|[\xFE-\xFE]......[\x80-\xBF]"
s = s & "|^[\x80-\xBF]"
re.Pattern = s
is_valid_utf8 = (Not re.Test(input))
End Function Function CheckCode(Sourcefile)
'WScript.echo "Checking: " & Sourcefile
Dim stream
set stream = CreateObject("Adodb.Stream")
stream.Type = 1 'adTypeBinary
stream.Mode = 3 'adModeReadWrite
stream.Open
stream.Position = 0
stream.LoadFromFile Sourcefile
Bin = stream.read(2)
s = read(Sourcefile) '读取文件
if is_valid_utf8(s)=-1 then'判断是否UTF-8
Codes = "utf-8"
msgbox Sourcefile&"文件为"&Codes&"非ansi请注意修改"
'&HEF 239 &HBB 187 &HFF 255 &HFE 254
elseif AscB(MidB(Bin, 1, 1)) = &HEF and _
AscB(MidB(Bin, 2, 1)) = &HBB Then
Codes = "utf-8"
msgbox Sourcefile&"文件为"&Codes&"非ansi请注意修改"
elseif AscB(MidB(Bin, 1, 1)) = &HFF and _
AscB(MidB(Bin, 2, 1)) = &HFE Then
Codes = "unicode"
msgbox Sourcefile&"文件为"&Codes&"非ansi请注意修改"
elseif AscB(MidB(Bin, 1, 1)) = &HFE and _
AscB(MidB(Bin, 2, 1)) = &HFF Then
Codes = "unicode big endian"
msgbox Sourcefile&"文件为"&Codes&"非ansi请注意修改"
Codes = "unicode"
else
Codes = "gb2312"
end if stream.Close
set stream = Nothing
CheckCode = Codes
end Function '*******************************************************************
'作用:transfer转换文件编码格式
'参数含义:incode为传入的文件编码 outcode转换后的文件编码
'*******************************************************************
Function transfer(inFile,incode,outcode,outfile)
Set instream = CreateObject("Adodb.Stream")
Set outstream = CreateObject("Adodb.Stream") 'Open input file
instream.Type = 2 'adTypeText
instream.Mode = 3 'adModeReadWrite
instream.Charset = inCode
instream.Open
instream.LoadFromFile inFile 'Read input file
content = instream.ReadText 'Close input file
instream.Close
Set instream = Nothing 'Open output file
outstream.Type = 2 'adTypeText
outstream.Mode = 3 'adModeReadWrite
outstream.Charset = outCode
outstream.Open 'Write to output file
outstream.WriteText content
outstream.SaveToFile outFile, 2 'adSaveCreateOverWrite
outstream.flush 'Close output file
outstream.Close
Set outstream = Nothing
end Function
'*******************************************************************
'作用:GetDirectory获取当前目录
'参数含义:
'*******************************************************************
Function GetDirectory()
Dim WshShell
Set WshShell=CreateObject("WScript.Shell")
GetDirectory = WshShell.CurrentDirectory
Set WshShell = nothing
End Function
'*******************************************************************
'*******************************************************************
'作用:rrubstr取字符串istr中的sign字符串后面的子字符串;从字符串尾部搜索的位置
'参数含义:
'*******************************************************************
Function rsubstr (istr, sign)
Dim fnum,substr
fnum = instrRev (istr,sign) + Len(sign) - 1
substr = Right (istr,Len(istr)-fnum)
rsubstr = substr
End Function
'*******************************************************************
'作用:
'参数含义:
'*******************************************************************
Function Main()
'创建新文件
Set nfso = CreateObject("Scripting.FileSystemObject")
'遍历一个文件夹下的所有文件
Set oFso = CreateObject("Scripting.FileSystemObject")
fold = GetDirectory()&"\"
Set oFolder = oFso.GetFolder(fold)
Dim inFile
isExist = 0
isTransfer = 0
isCount = 0
Set oFiles = oFolder.Files
'对每个文件进行处理
For Each oFile In oFiles
inFile = oFile.path
if rsubstr(inFile,".") <> "vbs" then isCount = isCount +1
incode = CheckCode (infile)
outcode ="gb2312"
if incode <> outcode then
choice = Msgbox(inFile & " is not ansi,请注意!" & vbCrlf & _
" Do you want to transfer it?", vbQuestion + vbYesNo, _
"Output file has been existed")
if choice = vbYES then
transfer inFile,incode,outcode,inFile
'msgbox inFile &"格式转换成功!"
isTransfer = isTransfer +1
end if
isExist = isExist+1
end if
end if
Next
set nfso = nothing
set ntf = nothing
set oFolder = nothing
set oFiles = nothing
msgbox "共检查文件:"&isCount&",发现格式不对文件:"&isExist&",共转换成功文件:"&isTransfer
End Function Main
新增检查sql脚本是否符合ANSI编码格式的更多相关文章
- flyway实现java 自动升级SQL脚本
flyway实现java 自动升级SQL脚本 为什么要用Flyway 在日常开发中,我们经常会遇到下面的问题: 自己写的SQL忘了在所有环境执行: 别人写的SQL我们不能确定是否都在所有环境执行过了: ...
- mysql命令行导入sql脚本中文变问号问题
之前一直用工具连接mysql虽然小问题不断也都无伤大雅,最近做金融云项目,只能通过服务器的内网访问数据库,也就是说只能在linux下通过命令行访问,在导入中文的时候发现都变成问号了,经过查询资料解决, ...
- 将现有的sql脚本导入 Oracle 数据库,中文乱码问题
将现有的sql 脚本导入 Oracle数据库 比如 在windows 系统下,可以写一个 bat 来实现直接导入 如:bat 中的内容如下,logs.log 将会记录执行日志 sqlplus user ...
- 如何快速的进行sql脚本升级
sql脚本升级即从一个老的脚本升级到一个新的全量的脚本.比如公司有某一个项目,有的客户已经用这个项目了,数据库里面去掉以前的初始化数据外,现在还有了客户自己的数据.但是这个版本中有严重的bug,所以为 ...
- Jenkins系列之-—08 实现SQL脚本批量执行
公司内部推广DevOps,所有目前在维护阶段和开发阶段项目全部配置上了自动发布.采用Jenkins+SVN+ANT,之后批量执行SQL语句的实现提上日程 一.环境 Linux环境 安装ANT工具,且下 ...
- 数据库优化方案之SQL脚本优化
随着数据库数据越来越大,数据单表存在的数据量也就随之上去了,那么怎么样让我们的脚本查询数据更快呢? 在这个地方我们主要提到两个数据库类型: 1.MSSQL(该数据库我们通过执行计划来查看数据库性能在哪 ...
- access生成sql脚本,通过VBA调用ADOX
access生成sql脚本,通过VBA调用ADOX. 使用 MS Access 2016 的VBA,读取mdb文件中的所有表结构(数据类型/长度/精度等),生成对应的SQL create table语 ...
- 让你提前认识软件开发(35):怎样改动SQL脚本以完毕需求?
第2部分 数据库SQL语言 怎样改动SQL脚本以完毕需求? SQL脚本的改动和C语言代码的改动流程是一样的,都要遵循下面步骤: 第一步,阅读需求.弄清楚自己要完毕什么功能. ...
- .net(C#)在Access数据库中执行sql脚本
自己写的一个工具类,主要是业务场景的需要. 主要有两个功能: ①执行包含sql语句的字符串 ②执行包含sql语句的文件 调用方式 /// <summary> /// 执行sql语句 /// ...
随机推荐
- OpenJDK编译运行
获取OpenJDK源码有两种方式,其中一种是通过Mercurial代码版本管理工具从Repository中直接取得源码(Repository地址:http://hg.openjdk.java.net/ ...
- linux系统挂载U盘,中文文件名乱码解决方案
本人(壮壮熊)所用系统:ubuntu 12.4 今天在使用mount指令挂在硬盘时,出现令人头疼的中文文件名乱码. 问题: 使用mount /dev/sdb1 /media指令挂在第二颗硬盘的第一个分 ...
- c++删除容器中的奇数
出自 c++ primer(4th)282页,26题 题意 数组ia[]={0,1,1,2,3,5,8,13,21,55,89};把ia复制到一个list容器中.使用单个迭代器参数版本的erase() ...
- [PY3]——内置数据结构(7)——字典及其常用操作
字典及其常用操作Xmind图 关于字典 字典是一种key-value结构 字典是无序的 字典的定义 # {}大括号可以直接定义一个空字典 In [1]: d={};type(d) Out[1]: di ...
- 用INFORMATION_SCHEMA逻辑MySQL的索引
分库分表的场景下,变更目前还不知道有哪个表变更索引失败,是不是所有的表都变更成功了,所以可以从INFORMATION_SCHEMA通过罗列索引个数,或者查看索引行,就可以知道是不是所有的都变更成功了: ...
- ayer.prompt 怎样让输入值为空也可以向下执行
http://fly.layui.com/jie/4227/ layer.prompt({title: '输入任何口令,并确认',formType: 1, //prompt风格,支持0-2value: ...
- C# 类库下 读取不到config里节点的问题
前提:要在当前项目下App.config配置信息里读取连接数据库的字符串.忘记创的是个类库.导致一直报错(对象未实例) 解决办法: 程序运行不会读取本项目下的app.config文件(实际它只是个模板 ...
- C#图片验证码绘制
制作验证码.也可以画弧线之类..... //新建一个网站,在后台代码中引用一个using Stystem.Drawing的命名空间 Bitmap img = , ); //制作一个宽100,高50的画 ...
- C++ 语法积累20161015
1.break 作用:用于终止当前循环(跳出循环体). 遇到最多的应该是在双层循环体中的使用: (1)在内循环体中,遇到break,则直接跳出内循环体,再次执行外循环体. (2) 在外循环体中,bre ...
- Java基础(3)——变量
从这篇文章起开始正式进入正题啦,本文将较为简单的介绍一下变量以及常量.变量,顾名思义,就是可以变的量,常量那么久相反了,常常不变的量就叫常量._(¦3」∠) 变量 在 Java 中,任何一个变量都得有 ...