Thread Parameter umwandeln
(55 answers)
Opened by Benji2010 at 2010-12-13 12:04
Das musst du schon etwas anders machen.
Bei while wird getestet ob etwas in der Art "A0=..." oder "T23555X" kommt. Wenn auch noch alle variablen, die in einer Klammer vorkommen heraus gefischt werden sollen, musst du den an der Stelle ändern nicht weiter unten. Ich fische nun zusätzlich alle Klammern heraus "(...)" und ersetze darin alle "Variablen" die gefunden werden. Versuch es mal ist ungetestet: Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 #!/usr/bin/perl -p use strict; use warnings; use vars qw(%var); while ( /([A-Z][0-9]*)=(\S+)|T\d{3,4}(\d\d)\d\D|([A-Z][0-9]*\()([^\)]+\))/g ) { my( $id, $val, $t_expr, $kstart, $kbody, $pos ) = ( $1, $2, $3, $4, $5, pos ); if ( defined $t_expr ) { $var{'R10'} = $t_expr; next; } if( defined $kstart ) { my $len=length($kstart.$kbody); $kbody=~s/([A-Z][0-9]*)/$var{$1}||''/ge; substr $_, $pos - $len, $len, $kstart.$kbody; pos = $pos - $len + length $kstart.$kbody; next; } if ( substr($_,0,1) eq '(' ) { next; } my $len = length $val; (my $tmp_val = $val) =~ s/([A-Z][0-9]*)/$var{$1}||''/ge; if ( $tmp_val =~ /^[\d\*\/\+\-\(\).]+$/ ) { $tmp_val = eval $tmp_val; $var{$id} = $val = $tmp_val unless $@; } substr $_, $pos - $len, $len, $val; pos = $pos - $len + length $val; } |