求一解决方案:文本文件的遍历、比较、替换
有三个字典,
字典1,“机器文字名”和“型号”的对应关系,1:N,例:
机器A NH-1 NH-2 CXY
机器B SIO-10 SIO-11
字典2,“机器文字名”和变换方法的对应关系,1:N,例(“条件”和“操作”都是变换前的字符串):
机器名 条件 操作 变换后
机器A .AS==HI .BST="CTUP"
.AS==LO .BST="PALM"
.AS=STR .OP=TMS
.AS=STOP .OP=TMSTOP
机器B .AS .@ALAM
.MODE .@MODE
.MODE .LS
字典3,“型号”和“假名”的对应关系,1:N,例:
型号 假名
NH-1 S5106
NH-1 S5107
NH-1 S5108
NH-2 SVA01
SIO-10 SCV1001
SIO-10 SCV1002
需要被替换的文件是一种自定义的程序语言文件,纯文本格式,字典3实际上是程序文件中的静态变量定义,字典1和字典2是EXCEL。
字典2中的.AS .MODE .BST是属性,而假名相当于对象,在程序文件中会这样出现:S5106.AS = STR
举一小段例子:
*--<UNIT INTERFACE>--------------------------------------------
global unit name NH-1 S5106
global unit name NH-1 S5107
global unit name NH-1 S5108
global unit name NH-2 SVA01
global unit name SIO-10 SCV1001
global unit name SIO-10 SCV1002
***************************************************************
* MAIN
***************************************************************
*------条件判断------------------------------------------------
LBL020: if (S5106.AS == HI) then * #1
SCV1001.MODE = "OUT" * #2
else
SCV1001.MODE = "IN" * #3
end if
***************************************************************
* 结束
***************************************************************
exit
#1行是“条件”语句,根据假名S5106找字典3,对应NH-1;然后找字典1,对应“机器A”;再查字典2,因为是条件语句,所以应该转换为:if (S5106.BST="CTUP") then
而#2和#3是“操作”语句,最终转换为:SCV1001.LS = "OUT" 和 SCV1001.LS = "IN"
诸如此类的查找替换
我自己的思路是这样的:
1、按行读取文件,直到<UNIT INTERFACE>块结束,做成字典3(每个文件的字义都不相同),将“假名”穷举写成一个正则表达式
2、继续按行读取文件,判断本行是否有假名
3、若有假名,判断是否条件语句,因为条件语句数量有限,也用穷举法写成一个正则表达式
4、查表、替换
我所有的困惑都在第四步,想把三个字典作成两个表:“条件”和“操作”;分3列:“假名”“变更前”“变更后”
但是开发用VB6.0,没有数据库,这两个表要做成什么形式?如果做成数组遍历的话效率会非常低。
文件数量庞大,单个文件本身也可能比较大,效率很重要。
求各位高手给提供一个解决方案,任何方案都可以。
知识的力量是伟大的,思想的碰撞会产生火花,星星之火可以燎原,希望大家不吝赐教。
小生我这里先行谢过了!