Thread Parameter umwandeln (55 answers)
Opened by Benji2010 at 2010-12-13 12:04

topeg
 2011-07-18 08:01
#150492 #150492
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
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;
}

View full thread Parameter umwandeln