ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/DGele/PhysicsTools/PatAlgos/scripts/patReplaceFast.pl
Revision: 1.1
Committed: Tue Oct 20 17:15:14 2009 UTC (15 years, 6 months ago) by dgele
Content type: application/x-perl
Branch: MAIN
Branch point for: ANA
Log Message:
Initial revision

File Contents

# User Rev Content
1 dgele 1.1 #!/bin/env perl
2     #
3     # Replaces for fast simulation
4     #
5     # Usage: $0 <file> <replaces file>
6     # Replaces in <file> from <replaces file>
7    
8     use strict;
9    
10     die "Usage: $0 <file> <replaces>\n" if ( @ARGV != 2 );
11    
12     my $cfgFile = $ARGV[0];
13     my $replaceFile = $ARGV[1];
14    
15     my %replaces;
16    
17     # Get list of replaces
18     open(IN,$replaceFile) or die "Couldn't open $replaceFile: $!";
19     while( <IN> ) {
20     if ( /replace\s+(\S+)(\s*=.*)[#|\/\/]?/ ) {
21     my $key = $1;
22     my $value = $2;
23     # Check for multi-line value
24     while ( &countBraces($value) > 0 ) {
25     my $line = <IN>;
26     $value .= $line;
27     }
28     $replaces{$key} = $value;
29     }
30     }
31     close(IN);
32    
33     # Open temporary file
34     my $temp = $cfgFile.".tmp";
35     open(TEMP,">$temp") or die "Couldn't open $temp: $!";
36    
37     # Scan cfgfile and replace
38     open(CFG,$cfgFile) or die "Couldn't open $cfgFile: $!";
39     while ( <CFG> ) {
40     chomp();
41     my $line = $_;
42     my $matched = 0;
43     foreach my $replace ( keys %replaces ) {
44     next if ( !$replaces{$replace} );
45     if ( $line =~ /$replace/ ) {
46     print TEMP "replace ".$replace.$replaces{$replace}."\n";
47     $replaces{$replace} = 0;
48     ++$matched;
49     last;
50     }
51     }
52     if ( !$matched ) {
53     print TEMP $line."\n";
54     }
55     }
56     close(CFG);
57    
58    
59     # Add missing items at the end of file (things that are only replaced in FastSim)
60     # Print header
61     print TEMP <<HEADER
62     ############################
63     # Fast simulation replaces #
64     ############################
65     HEADER
66     ;
67     foreach my $replace ( keys %replaces ) {
68     next if ( !$replaces{$replace} );
69     print TEMP "replace ".$replace.$replaces{$replace}."\n";
70     }
71     close(TEMP) or die "Couldn't close $temp: $!";
72     rename($temp,$cfgFile);
73    
74    
75     #______________________________________________________________________
76     # Count number of braces
77     # Opening adds one, closing removes one
78     sub countBraces {
79    
80     my $string = shift;
81     my $nBraces = 0;
82     my $char = "";
83    
84     while ( length($string)>0 ) {
85     $char = chop($string);
86     ++$nBraces if ( $char =~ /\{/ );
87     --$nBraces if ( $char =~ /\}/ );
88     }
89    
90     return $nBraces;
91    
92     }