您的位置:首页 > 编程语言 > VB

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

2012-04-24 21:28 330 查看

起因:

事情是这样子的:最近使用一个叫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文件,改改就能用了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐