##############################################################################
# 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;
|