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

benji2010
 2011-01-04 07:26
#144002 #144002
User since
2010-12-20
13 Artikel
BenutzerIn
[default_avatar]
Hallo Matthias,

ja du hast Recht, die Klammer fehlt...aber der Code funktioniert so wie ich es möchte.

Input:

Quote
R11=50
(R3=4
R1=5
X=R11+R1
X=R3



Output:

Quote
R11=50
(R3=4
R1=5
X=55
X=R3


Und das mit dem folgenden Code:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#!/usr/bin/perl -p

use strict;
use warnings;
use vars qw(%var);

while ( /([A-Z][0-9]*)=(\S+)/g ) {
if ( substr($_,0,1) eq '(' ) {
next;
}
my( $id, $val, $pos ) = ( $1, $2, pos );
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;
}


Die T-Ausdrücke habe ich auch eingebaut, allerdings bekomme ich hier keine Ausgabe mehr. Der Fehler ist mir aber nicht ersichtlich.

Hier der Code, mit deinem Vorschlag:

Code: (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
#!/usr/bin/perl -p

use strict;
use warnings;
use vars qw(%var);

while ( /([A-Z][0-9]*)=(\S+)|T\d{3}(\d\d)\d/g ) {
my( $id, $val, $t_expr, $pos ) = ( $1, $2, $3, pos );

if ( defined $t_expr ) {
$var{'R10'} = $t_expr;
next;
}

while ( /([A-Z][0-9]*)=(\S+)/g ) {
if ( substr($_,0,1) eq '(' ) {
next;
}
my( $id, $val, $pos ) = ( $1, $2, pos );
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