起因:
事情是这样子的:最近使用一个叫msmanager的数据库工具,英文界面,但有russian语的语言文件。然后在找了一个旧版本的chinese语言文件,发现里面的字段不太一样,就想做一个比对工具,使用russian更新chinese语言文件,故有了本脚本。
过程:
需求:
1.自动分析每块([xxx]开头的每一个块),chinese中没有的块从russian中复制过来
2.分析每块中的字段,chinese中没有的字段从russian中复制过来
分析:
1.块可以通过空行分割
2.字段可以通过split分割
实现:
最终的代码实现如下:(注释掉的msgbox为调试的时候用的)
'本程序需刨除一切异常,否则报错:块间空两行、末尾空行、块间未空行
'本程序实现思路:
'可用条件:按=分割\按vbcrlf分割\按空行分割(vbcrlf&vbcrlf)
'流程:块比对 -> 行比对
'
set FSO = CreateObject("scripting.FileSystemObject")
'open or create file
Set Filec = FSO.OpenTextFile(".\chinese.lng",1,False)
Set Filer = FSO.OpenTextFile(".\russian.lng",1,False)
set Filew = FSO.CreateTextFile(".\result.txt", true)
'按空行分割文件
regc = Split(Filec.ReadAll(),vbcrlf&vbcrlf)
regr = Split(Filer.ReadAll(),vbcrlf&vbcrlf)
'msgbox "regc块数:" & ubound(regc)
'msgbox "regr块数:" & ubound(regr)
for reg_r = 0 to ubound(regr)
mmark = "reg_no_mark"
for reg_c = 0 to ubound(regc) '############第一层双循环,块比对(第一行[]比对)####
'msgbox "regr第" & reg_r & "块:" & vbcrlf & regr(reg_r)
'msgbox "regc第" & reg_C & "块:" & vbcrlf & regC(reg_C)
liner = Split(regr(reg_r) , vbcrlf)
linec = Split(regc(reg_c) , vbcrlf) '每块分割为行
'msgbox UBound(Split(regr(reg_r) , vbcrlf) )
'msgbox UBound(Split(regr(reg_c) , vbcrlf) )
if StrComp(liner(0) , linec(0), 1 ) = 0 then
'msgbox "r第" & reg_r & "块:" & liner(0) & vbcrlf & " c第" & reg_c & "块:" & linec(0)
filew.writeline liner(0) '找到匹配块,[XXXX]写入文件
mmark = "reg_have_mark"
for line_r = 1 to ubound(liner)
mark = "line_no_mark"
for line_c = 1 to ubound(linec) '##########第二层双循环,块中每行比对##
'msgbox "regr第" & reg_r & "块第" & line_r & "行:" & vbcrlf & liner(line_r)
'msgbox "regc第" & reg_C & "快第" & line_c & "行:" & vbcrlf & linec(line_c)
linerf = Split(liner(line_r) , "=")(0)
linecf = Split(linec(line_c) , "=")(0)
if StrComp(linerf , linecf ,1) = 0 then
'msgbox "regr第" & reg_r & "块第" & line_r & "行:" & vbcrlf & linerf & vbcrlf & "regc第" & reg_C & "快第" & line_c & "行:" & vbcrlf & linecf
filew.writeline linec(line_c) '找到匹配行,写入文件
mark = "line_have_mark"
exit for
end if
next '#################第二层双循环结束##
if mark = "line_no_mark" then
filew.writeline linerf & "=""" & linerf & """" '未匹配行,处理后写文件
'filew.writeline liner(line_r) '未匹配行,直接写文件
'msgbox "未找到的行:" & linerf & "=""" & linerf & """" & vbcrlf
end if
next
filew.writeline '区块间换行,空为写入一个空行
exit for
end if
next '##########第一层双循环结束#####
if mmark = "reg_no_mark" then
'msgbox "r第" & reg_r & "块:" & liner(0) & vbcrlf & " c第" & reg_c & "块:" & linec(0)
filew.writeline regr(reg_r) & vbcrlf '未匹配的区块,直接写文件
'####################未匹配的区块,处理后写文件
'filew.writeline liner(0)
'for line_rr = 1 to ubound(liner)
'linerff = Split(liner(line_rr) , "=")(0)
'filew.writeline linerff & "=""" & linerff & """"
'next
'filew.writeline '区块间换行,空为写入一个空行
'####################
end if
next
Filec.Close
Filer.Close
Filew.Close
结果:
转换很成功,不过转换后却懒得翻译了。。好在还有点东西,不算毫无收获吧。。下次想编辑ini文件,改改就能用了。