##############################################################################
# Copyright (c) 2010-2099, Jacky Wei.
# Filename : ModifyFile.pm
# Sub_System : PERL
# Author : 魏彪
# Date : 2010-04-19
# Description : 该包,按照配置修改文件.
# History : 无
##############################################################################
package ModifyFile; use strict;
my $equal = " = "; #等于符号,用于连接字符串使用
my $spacebar = "\t"; #空格字符,用于连接字符串使用
#这里和模块,不同的是,不用给出接口~(对外部可以被访问的函数)
sub new { #构造函数,无参数
my $this = {}; bless $this; return $this; }
sub ModifyFile { shift @_; die "参数错误,退出程序" if @_ != 1; my $config = shift @_; foreach (keys ${$config}) { #遍历文件(在设置文件中设置的文件)
next if $_ eq "mainFile"; #如果为mainFile文件,就进入下一次循环
my $fileName = $_; my @fileArray; my $fileDomain = "mainDomain"; #初始化文件域
open FILE, "<$FileName" or die "打开文件失败.提示: "."$_"."出错 \n"; while(<FILE>) { #匹配文件内容
#my $allowPush = 1;
if ($_ =~ /^[\#]|^\/\//)
{ #以#号开头或//开头的全部直接跳过
push @fileArray; } else { if($_ =~ /^\[([a-zA-Z\d\_]+)\]/) { #域的名字只能是大小写字母和数字还有下划线
$fileDomain = $1; push @fileArray,$_; #新增或设置成当前空间的块
next; } elsif($_ =~ /^([\w\d\[\]]+)\s*\=\s*([\w\d\.]+)(\s*.*)/) { if (${$config}{$fileName}{$fileDomain}{$1}) { #如果KEY存在
$_ = $1.$equal.${$config}{$fileName}{$fileDomain}{$1}.$3; } push @fileArray,$_; #增加键值,用于对比,具体参数
#匹配: (参数 = 参数值 #说明)格式;
next; } elsif($_ =~ /^([\w\d]+)\s+([\w\d]+)\s+(\/[\w\d\/]+)(\s*.*)/) { my $argTemp; $argTemp = $1."\t".$2; #不知道\t可不可以做KEY值的一部分
#${$config}{$fileName}{$fileDomain}{$argTemp} = $3;
if (${$config}{$fileName}{$fileDomain}{$argTemp}) { #判断config有无此设置
$_ = $argTemp.$spacebar.${$config}{$fileName}{$fileDomain}{$argTemp}.$3; } push @fileArray,$_; #把前两个字符相连做为键值,以确定唯一性
#匹配:(参数名1 参数名2 参数值(可能是'/'开头) //说明)
next; } elsif($_ =~ /^([\w\d]+)\s+([\w\d]+)\s+(\/\/[\w\d\/]+)(\s*.*)/) { #这里可能会和上面的重叠
#print "$fileName---\n" unless($fileName);
if (${$config}{$fileName}{$fileDomain}{$1}) { $_ = $1.$spacebar.${$config}{$fileName}{$fileDomain}{$1}.$spacebar.$3.$4; } push @fileArray,$_; next; #匹配 : (参数 参数值 //说明) 格式
} elsif($_ =~ /^([\w\d]+)\s+([\w\d]+)(\s*.*)/) { #这里可能会和上面的重叠
#print "$fileName---\n" unless($fileName);
if (${$config}{$fileName}{$fileDomain}{$1}) { $_ = $1.$spacebar.${$config}{$fileName}{$fileDomain}{$1}.$spacebar.$3; } push @fileArray,$_; next; #匹配 : (参数 参数值) 格式
} else { print "匹配有问题!请检查相关设置,参看相关说明!"."\n"; open(ErrorFile,">>Error.txt"); print ErrorFile $_."\n"; #记录出错行以供错误检查
close ErrorFile; } } } close FILE; #下面为写文件
open FILE ">$fileName" or die "晕死,又出问题?!~?!~"."\n"; print FILE foreach @fileArray; close FILE; #写文件结束
} }
1;
|