FHEM Forum

FHEM => Sonstiges => Thema gestartet von: P.A.Trick am 26 April 2014, 18:44:54

Titel: [GELÖST] Perl Support - mehrdimensionales Array
Beitrag von: P.A.Trick am 26 April 2014, 18:44:54
Liebe Perl Experten,

ich würde gerne für eine Text2Speech mehrere Strings ersetzen.
Beispiel einfach:


my $find;
my $replace;
$find="EG.WZ.";
$replace="Wohnzimmer ";

$mystring =~ s/\Q$find\E/$replace/g;


Das klappt auch super, nur möchte ich einige Strrings ersetzen und das würde ich
gerne mit einer foreach Schleife lösen.

$stringreplace["0"]["EG.WZ."]["Wohnzimmer"];
$stringreplace["1"]["EG.WC."]["Gaeste WC"];
....

Kann mir einer bei den Arrays helfen?

Titel: Antw:Perl Support - mehrdimensionales Array
Beitrag von: Dietmar63 am 26 April 2014, 19:43:58
du benötigst ein hash:

Dieser Code macht so etwas ähnliches. Ich lese damit den CPU Verbrauch von TOP aus. Du benötigst wahrscheinlich keine geschachtelte Schleife, und mußt die while-Schleife ersetzen. Ich habe alles so gelassen, damit ich nichts fehlerhaftes veröffentliche.
Wenn du Fragen hast einfach hier in den Thread schreiben:

    my $hash = {};

    $hash->{idle}{REG}     = '(\d+\.\d+)% idle';
    $hash->{zip}{REG}      = '(\d+\.\d+) gzip';
    $hash->{smb}{REG}      = '(\d+\.\d+) /sbin/smbd';


    my $idx;
    my $ges = 0;
    foreach my $proc (keys %{$hash}) {

       $idx = 0;
       pos $res, 1;
       my $reg = $hash->{$proc}{REG};

       while ($res=~/$reg/g ){
        my $p = pos $res;
        $idx++;
      }
   }

Titel: Antw:Perl Support - mehrdimensionales Array
Beitrag von: P.A.Trick am 27 April 2014, 11:54:02
Cool habe es hinbekommen! Danke!

   my $matrix = {};

    $matrix->{'EG.WZ'}{REG}     = 'Wohnzimmer';
    $matrix->{'EG.WC.'}{REG}     = 'Gaeste-WC';
    $matrix->{'UG.WK'}{REG}        = 'Waeschekeller';
    $matrix->{'CUL'}{REG}        = 'USB Sendestick';
    $matrix->{': on'}{REG}       = 'eingeschaltet';
    $matrix->{': off'}{REG}      = 'ausgeschaltet';
    my $idx;

    foreach my $suchen (keys %{$matrix}) {
       $idx = 0;
       pos $mystring, 1;
       my $ersetzen = $matrix->{$suchen}{REG};
     
       while ($mystring=~/$suchen/g ){
        my $p = pos $suchen;
        Log(3,"suchen: $suchen ersetzen: $ersetzen");
        $mystring =~ s/\Q$suchen\E/$ersetzen/g;
        $idx++;
      }
   }