[code=perl] #!/usr/bin/perl # Designed by # Version xx.xx.xx # # Function: # Input/Parameter: # Output: # USAGE: #------------------------------------------------------------------------------ # * Usings use warnings; use strict; use Cwd; # *----------------------------------------------------------------------------- # ------------------------------------------------------------------------------ # * Variables my $str_search_pattern = "MY_OLD_CONST"; my $str_replacement_expression = "MY_NEW_CONST"; my $logfileout='C:\temp\sysconst.log'; my $path; my $path_tbc; my $filein; my $fileout; #my@arr_all_files=Sub_Search_For_Files_REC(Sub_Get_Root_Directory(),1,'.xml'); my @arr_all_files=Sub_Search_For_Files_REC(Sub_Get_Root_Directory(),1); my @arr_files_tbc=(); my $st_files_tbc; my %hash_alloc_pp_key=('0','0','1','100','2','200','3','300','4','400','5','500'); foreach $path (@arr_all_files) { $st_files_tbc=0; $filein =$path; open(my $FHIN , '<', $filein) or die "ERROR open $filein ($!)\n"; while(my $line=<$FHIN>) { if($line=~/(^\s*#\s*(elif|if)\s*[\(\s]+\s*[!]*\(*\s*)${str_search_pattern}\s*[!=]+=\s*(\d)(.*\))/) { $st_files_tbc=1; } elsif($line=~/(^\s*#\s*ifndef\s*[\(\s]*\s*\(*\s*)${str_search_pattern}(.*)/) { $st_files_tbc=2; } elsif($line=~/(^\s*#\s*define\s*[\(\s]+\s*[!]*\(*\s*)${str_search_pattern}\s*(\d)(.*)/) { $st_files_tbc=4; } elsif($line=~/(^\s*#\s*error.*)${str_search_pattern}(\.*)/) { $st_files_tbc=8; } elsif($line=~/(^\s*\/\*\s*.*)${str_search_pattern}(.*)\*\//) { $st_files_tbc=16; } elsif($line =~/(\.*\s*)${str_search_pattern}(\s*<\/ONE-XML-TAG>\s*==\s*)(\d)/) { $st_files_tbc=32; } elsif($line =~/(\.*\s*)${str_search_pattern}(\s*<\/Secound-XML-TAG>)/) { $st_files_tbc=64; } elsif($line =~/(^\s*<\s*VT\s*>\s*)${str_search_pattern}(\s*<\s*\/VT\s*>)/) { $st_files_tbc=128; } elsif($line =~/(\s*\s*)${str_search_pattern}(\s*<\/ONE-XML-TAG>)/) { $st_files_tbc=255; } } if($st_files_tbc>0) { push (@arr_files_tbc,$path); } close($FHIN); } foreach $path_tbc (@arr_files_tbc) { $filein =$path_tbc; $fileout=$path_tbc.".keep"; open(my $FHIN , '<', $filein) or die "ERROR open $filein ($!)\n"; open(my $FHOUT, '>', $fileout) or die "ERROR open $fileout ($!)\n"; open(my $FHLOG, '>', $logfileout) or die "ERROR open $logfileout ($!)\n"; while(my $line=<$FHIN>) { # suchen und ersetzen vom PP-Schalter und dessen Wert in Dateien! if($line=~/(^\s*#\s*(elif|if)\s*[\(\s]+\s*[!]*\(*\s*)${str_search_pattern}\s*[!=]+=\s*(\d)(.*\))/) { $line=~s/(^\s*#\s*(elif|if)\s*[\(\s]+\s*[!]*\(*\s*)${str_search_pattern}\s*([!=]+=)\s*(\d)(.*\))/$1${str_replacement_expression}$3$hash_alloc_pp_key{$4}$5/; #if($line=~/(\s*(&||)\s*[\(\s]+\s*[!]*\(*\s*)${str_search_pattern}\s*([!=]+=)\s*(\d)(.*\))/) #{ #$line=~s/(\s*(&||)\s*[\(\s]+\s*[!]*\(*\s*)${str_search_pattern}\s*([!=]+=)\s*(\d)(.*\))/$1${str_replacement_expression}$3$hash_alloc_pp_key{$4}$5/g; #} while($line=~/(\s*(&||)\s*[\(\s]+\s*[!]*\(*\s*)${str_search_pattern}\s*([!=]+=)\s*(\d)(.*\))/) { $line=~s/(\s*(&||)\s*[\(\s]+\s*[!]*\(*\s*)${str_search_pattern}\s*([!=]+=)\s*(\d)(.*\))/$1${str_replacement_expression}$3$hash_alloc_pp_key{$4}$5/g; } print $FHLOG "Line number| \t" . "$." . "|\t" . "Path | ". "\t" . "$path_tbc " . "| \t" . "New Expression |" . "\t". "$line" . "\n" ; } elsif($line=~/(^\s*#\s*ifndef\s*[\(\s]*\s*\(*\s*)${str_search_pattern}(.*)/) { $line=~s/(^\s*#\s*ifndef\s*[\(\s]*\s*\(*\s*)${str_search_pattern}(.*)/$1${str_replacement_expression}$2/; print $FHLOG "Line number| \t" . "$." . "|\t" . "Path | ". "\t" . "$path_tbc " . "| \t" . "New Expression |" . "\t". "$line" . "\n"; } elsif($line=~/(^\s*#\s*define\s*[\(\s]+\s*[!]*\(*\s*)${str_search_pattern}\s*(\d)(.*)/) { $line=~s/(^\s*#\s*define\s*[\(\s]+\s*[!]*\(*\s*)${str_search_pattern}\s*(\d)(.*)/$1${str_replacement_expression}$hash_alloc_pp_key{$2}$3/; print $FHLOG "Line number| \t" . "$." . "|\t" . "Path | ". "\t" . "$path_tbc " . "| \t" . "New Expression |" . "\t". "$line" . "\n"; } elsif($line=~/(^\s*#\s*error.*)${str_search_pattern}(\.*)/) { $line=~s/(^\s*#\s*error.*)${str_search_pattern}(\.*)/$1${str_replacement_expression}$2/; print $FHLOG "Line number| \t" . "$." . "|\t" . "Path | ". "\t" . "$path_tbc " . "| \t" . "New Expression |" . "\t". "$line" . "\n"; } elsif($line=~/(^\s*\/\*\s*.*)${str_search_pattern}(.*)\*\//) { $line=~s/(^\s*\/\*\s*.*)${str_search_pattern}(.*\*\/)/$1${str_replacement_expression}$2/; } elsif($line =~/(\.*\s*)${str_search_pattern}(\s*<\/ONE-XML-TAG>\s*==\s*)(\d)/) { $line =~s/(\.*\s*)${str_search_pattern}(\s*<\/ONE-XML-TAG>\s*==\s*)(\d)/$1${str_replacement_expression}$2$hash_alloc_pp_key{$3}/g ; print $FHLOG "Line number| \t" . "$." . "|\t" . "Path | ". "\t" . "$path_tbc " . "| \t" . "New Expression |" . "\t". "$line" . "\n"; } elsif($line =~/(\.*\s*)${str_search_pattern}(\s*<\/Secound-XML-TAG>)/) { $line =~s/(\.*\s*)${str_search_pattern}(\s*<\/Secound-XML-TAG>)/$1${str_replacement_expression}$2/g; print $FHLOG "Line number| \t" . "$." . "|\t" . "Path | ". "\t" . "$path_tbc " . "| \t" . "New Expression |" . "\t". "$line" . "\n"; } elsif($line =~/(^\s*<\s*VT\s*>\s*)${str_search_pattern}(\s*<\s*\/VT\s*>)/) { $line =~s/(^\s*<\s*VT\s*>\s*)${str_search_pattern}(\s*<\s*\/VT\s*>)/$1${str_replacement_expression}$2/g; print $FHLOG "Line number| \t" . "$." . "|\t" . "Path | ". "\t" . "$path_tbc " . "| \t" . "New Expression |" . "\t". "$line" . "\n"; } elsif($line =~/(\s*\s*)${str_search_pattern}(\s*<\/ONE-XML-TAG>)/) { $line =~s/(\s*\s*)${str_search_pattern}(\s*<\/ONE-XML-TAG>)/$1${str_replacement_expression}$2/; print $FHLOG "Line number| \t" . "$." . "|\t" . "Path | ". "\t" . "$path_tbc " . "| \t" . "New Expression |" . "\t". "$line" . "\n"; } print $FHOUT $line; } close($FHOUT); close($FHIN); close($FHLOG); } print join("\n",@arr_files_tbc); # # *************************************************************************************************** # * Sub_Get_Root_Directory # * # * Function # * # * # * \return root_directory # *************************************************************************************************** # */ sub Sub_Get_Root_Directory { # startverzeichnis wir ueber kommandozeile vom Anwender festgelegt. my $root_directory = $ARGV[0]; my $cmd_input ; if(@ARGV == 0) { # das aktuelle Verzeichnis ermitteln. $root_directory=cwd; print "\n################################################################################\n"; print "Start directorie is:\t $root_directory\n"; print "Do you want to continue?\nPress any key for continue or Press q for Quit:"; print "\n################################################################################\n"; chomp ($cmd_input = ); if($cmd_input eq "q") { print "Script was aborted by user!\n"; exit; } } return $root_directory; } # *************************************************************************************************** # * Sub_Search_For_Files_REC # * # * Function # * Startdir ohne abschließendes /, aktuelles Verzeichnis = . # * Unterverzeichnisse durchsuchen? 1: ja, 0: nein # * Dateitypen in form .c.h.xml , also direkt hintereinander, aber nur wenn nötig # * ansonsten wird alles gezeigt # * \return Liste der gefundenen Dateien - @arr_all_files # *************************************************************************************************** sub Sub_Search_For_Files_REC { my $startdir=shift; my $include_subdirs=shift; my $strFileExtension=shift; my %strFileExtension=(); $strFileExtension=~ s/\s//g; my @strFileExtension=split('\.',$strFileExtension); shift @strFileExtension; my @arr_all_files=(); $strFileExtension=0; $startdir=~ s/\/$//; if (@strFileExtension != 0) { $strFileExtension=1; # wenn Endungen angegeben foreach (@strFileExtension){$strFileExtension{$_}=1;} } @strFileExtension=(); push (my @all_directories,$startdir); foreach my $akdir(@all_directories) { local *in; opendir (in,$akdir); my @all=readdir(in); closedir in; foreach my $akdatei (@all) { next if ($akdatei eq '..' || $akdatei eq '.'); if (-d "$akdir/$akdatei") { if ($include_subdirs == 1) { push (@all_directories,"$akdir/$akdatei"); next; } } else { if ($strFileExtension==0) { push (@arr_all_files,"$akdir/$akdatei"); } else { my @endung=split('\.',$akdatei); my $endung=$endung[-1]; if ($strFileExtension{$endung} == 1) { push (@arr_all_files,"$akdir/$akdatei"); } } } } } return @arr_all_files; } [code=perl]