关于一个类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文件,改改就能用了。相关文章推荐
- 一个关于64位进制转换的java实现
- 用VBS实现一个小键盘动作CTRL+V粘贴操作与思路分析
- sql server 关于表中只增标识问题 C# 实现自动化打开和关闭可执行文件(或 关闭停止与系统交互的可执行文件) ajaxfileupload插件上传图片功能,用MVC和aspx做后台各写了一个案例 将小写阿拉伯数字转换成大写的汉字, C# WinForm 中英文实现, 国际化实现的简单方法 ASP.NET Core 2 学习笔记(六)ASP.NET Core 2 学习笔记(三)
- 关于S5PV210的启动问题和u-boot分析并自己实现一个简单的boot(一)
- 用VBS实现一个小键盘动作CTRL+V粘贴操作与思路分析
- 自己实现一个SQL解析引擎 功能:将用户输入的SQL语句序列转换为一个可执行的操作序列,并返回查询的结果集。 SQL的解析引擎包括查询编译与查询优化和查询的运行,主要包括3个步骤: 查询分析
- [详细分析]实现一个8bit数据(unsigned char)的指定位的置0或者置1操作,并保持其他位不变
- 一个非常有用的关于集合的例子,实现集合的add,remove和this[index]方法
- 实现了一个延时几秒钟的开始activity的图像画面,然后转换到其他Activity
- 关于Ext3.0中按条件查询并重新加载Grid中的数据的实现过程及store.load的分析
- 将一个十进制数转换成二进制输出--递归实现
- OpenRisc-31-关于在设计具有DMA功能的ipcore时的虚实地址转换问题的分析与解决
- 3月题外:关于JS实现图片缩略图效果的一个小问题
- 实现一个列表变成字典的转换
- 对一个罗马数字与阿拉伯数字转换算法的分析
- 分析一个通用的rtsp server实现过程串联模块
- 关于QImage和IplImage之间转换的实现
- [转]关于ffmpeg 的总结(一个linux 下 集 屏幕录像录音,音频视频转换,合并音频视频文件,格式转换于一身的命令)
- 【C语言】【笔试题】实现一个函数int my_atoi(char s[]),可以将一个字符串转换为对应的整数。
- 关于NBearMapping中枚举类型转换的一个Bug