关于一个类ini文件的分析和转换的vbs实现

来源:互联网 发布:mac系统导出照片到手机 编辑:程序博客网 时间:2024/06/05 23:45

起因:

事情是这样子的:最近使用一个叫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 fileSet 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 ifnext '##########第一层双循环结束#####      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.CloseFiler.CloseFilew.Close


结果:

转换很成功,不过转换后却懒得翻译了。。好在还有点东西,不算毫无收获吧。。下次想编辑ini文件,改改就能用了。