.titleBar { margin-bottom: 5px!important; }

Variablen sortieren / vergleichen / verwerfen

Dieses Thema im Forum "Asterisk Skripte" wurde erstellt von betateilchen, 22 Sep. 2004.

  1. betateilchen

    betateilchen Grandstream-Guru

    Registriert seit:
    30 Juni 2004
    Beiträge:
    12,882
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Ort:
    am Letzenberg
    Hallo Skript-Experten !

    Momentan steht ich vor folgendem Problem:

    - Gegeben ist eine Menge n Variablen(VAR1 VAR2 ... VARn), mit denen eine bestimmte Aktion ausgeführt werden soll.
    - Es ist durchaus möglich, daß in dieser Menge Variablen mit gleichem Inhalt vorhanden sind

    Bevor ich nun im Dialplan die geplante Aktion einleite, möchte ich natürlich diese "doppelten" Einträge aussortieren, um die Aktion nur für die "unterschiedlichen" Inhalte aufzurufen.

    Hat jemand eine Idee, wie ich das realisieren kann ?
     
  2. Hupe

    Hupe Aktives Mitglied

    Registriert seit:
    8 Apr. 2004
    Beiträge:
    2,586
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Ja, habe ich: mit Perl ne simple verschachtelte Zweifachschleife. Sollte aber auch mit Php gehen.
    Wo kommen "die Variablen" denn her? Aus Asterisk oder von woanders?
     
  3. betateilchen

    betateilchen Grandstream-Guru

    Registriert seit:
    30 Juni 2004
    Beiträge:
    12,882
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Ort:
    am Letzenberg
    Wo die Daten herkommen, ist mehr oder weniger flexibel. Im Moment kommen die aus Asterisk.
     
  4. Hupe

    Hupe Aktives Mitglied

    Registriert seit:
    8 Apr. 2004
    Beiträge:
    2,586
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Naja, wenn man die "Variablen" dem Agi-Skript übergeben kann, dann kann man se in Perl auch ziemlich simpel auf Doppelte untersuchen:
    Man bekommt die Variablen ja wohl als Hash übergeben. Die müsste man nur einfach der reihe nach auslesen, und, bevor man se in ein Array schiebt, (oder einen Hash, das kommt drauf an, was man noch damit vor hat) muß man eben selbigen Array (Hash) durchlaufen, ob dieser Wert schon existiert.
    Mit "SET VARIABLE" liessen sich die Variablen ja schön wieder zurückschreiben (da würden sich dan Hashes als Ziel-Datenstruktur gut eignen).
     
  5. Hupe

    Hupe Aktives Mitglied

    Registriert seit:
    8 Apr. 2004
    Beiträge:
    2,586
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Also, hier mal ne kleine Lösung. Sie funz, wenn Du die zu übergebenden Werte mit ARG1, ARG2 usw in Asterisk als Variablen definiert hast.

    Code:
    #!/usr/bin/perl -w
    
    use Asterisk::AGI;
    
    $AGI = new Asterisk::AGI;
    
    # pull AGI variables into %input
    
    %input = $AGI->ReadParse();
    
    $AGI->verbose("AGI-Script started", 2);
    my (%output);
    $varprefix="ARG"; #Vorsilbe der Variablen aus Asterisk
    
    my $lastarg = 1;
    while($lastarg >= 1){ ##Einlesen der einzelnen Variablen aus Asterisk
    	my $value = $AGI->get_variable("$varprefix$lastarg");
    	if($value eq undef){ ### Wenn die letzte Variable erreichtist...
    		$AGI->verbose("$varprefix$lastarg mit $value war letzte Variable", 2);
    		$lastarg = 0;
    	}else{
    		my $exists = 0;
    		foreach $position (keys %output){  ## output nach doppelten Einträgen durchsuchen
    			if($output{$position}eq $value){
    				$exists = 1;
    				$AGI->verbose("$varprefix$lastarg => $value existiert bereits!", 2);
    			}
    		}
    		if($exists == 0) {
    			$output{"$varprefix$lastarg"} = $value;
    			$AGI->verbose("$varprefix$lastarg => $value zum Hash hinzugefügt!", 2);
    		}
    		$lastarg = $lastarg + 1;
    	}
    }
    
    ## Kontrolle der Variablen in Asterisk
    
    $AGI->verbose("The Hash consists of:", 2);
    foreach $position (keys %output){
    	my $message = "$position => $output{$position}";
    	$AGI->verbose($message, 2);
    	
    }
    
    Was Du dann damit machst, ist natürlich noch offen. Nach dem Schema sollte man auch werde aus der Asterisk Datenbank übernehmen können. Da ich ja keine Ahnung habe, was Du damit vorhast, muß ich sehr Allgemein bleiben.
     
  6. allesOK

    allesOK Mitglied

    Registriert seit:
    24 Mai 2004
    Beiträge:
    732
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Verräts du uns auch, worum es geht. Bin sooo neugierig (bzw. freue mich über abgefahrene Dinge im *).
     
  7. Hupe

    Hupe Aktives Mitglied

    Registriert seit:
    8 Apr. 2004
    Beiträge:
    2,586
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Das könnte er bestimmt, aber vielleicht müsste er uns dann töten. :) :beerdigu:
     
  8. betateilchen

    betateilchen Grandstream-Guru

    Registriert seit:
    30 Juni 2004
    Beiträge:
    12,882
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Ort:
    am Letzenberg
    bla bla - ich werde es Euch schon noch sagen.
    Wenn alles klappt, kriege ich meine Idee im Grundgerüst heute nacht fertig, dann können sich die Skript-Programmierer draufstürzen und daraus was "schönes" machen.

    Gebt mir noch ein bißchen Zeit ... im Moment erstmal Danke an Hupe für das "Skript-Gerüst"
     
  9. betateilchen

    betateilchen Grandstream-Guru

    Registriert seit:
    30 Juni 2004
    Beiträge:
    12,882
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Ort:
    am Letzenberg