[GELÖST] Perl Support - mehrdimensionales Array

Begonnen von P.A.Trick, 26 April 2014, 18:44:54

Vorheriges Thema - Nächstes Thema

P.A.Trick

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?

Cubietruck,RPI,QNAP Ts-419p+, FS20, FRITZ!DECT200, 7 MAX! Thermostate, 3 MAX! Fensterkontakte, Kodi, CUL V3.3, EM1000S, LW12, LD382, HUE, HM-CFG-USB-2, 1x HM-LC-SW1-FM, 2x HM-LC-SW2-FM, 2x HM-LC-Sw1PBU-FM, 3xHM-LC-Bl1PBU-FM,HM-SEC-RHS, 2xHM-SEC-SD,HM-WDS30-T-O, 3x HM-LC-Dim1TPBU-FM, RPI+AddOn

Dietmar63

#1
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++;
      }
   }

Gruß Dietmar
FB7390, CUL, 2 FHT, FS20
modules: 98_WOL.pm, 98_Heating_Control.pm,   98_WeekdayTimer.pm, 98_RandomTimer.pm, 59_Twilight.pm

P.A.Trick

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++;
      }
   }
Cubietruck,RPI,QNAP Ts-419p+, FS20, FRITZ!DECT200, 7 MAX! Thermostate, 3 MAX! Fensterkontakte, Kodi, CUL V3.3, EM1000S, LW12, LD382, HUE, HM-CFG-USB-2, 1x HM-LC-SW1-FM, 2x HM-LC-SW2-FM, 2x HM-LC-Sw1PBU-FM, 3xHM-LC-Bl1PBU-FM,HM-SEC-RHS, 2xHM-SEC-SD,HM-WDS30-T-O, 3x HM-LC-Dim1TPBU-FM, RPI+AddOn