Variablen sortieren / vergleichen / verwerfen

betateilchen

Grandstream-Guru
Mitglied seit
30 Jun 2004
Beiträge
12,882
Punkte für Reaktionen
0
Punkte
0
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 ?
 
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?
 
Wo die Daten herkommen, ist mehr oder weniger flexibel. Im Moment kommen die aus Asterisk.
 
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).
 
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.
 
Verräts du uns auch, worum es geht. Bin sooo neugierig (bzw. freue mich über abgefahrene Dinge im *).
 
allesOK schrieb:
Verräts du uns auch, worum es geht. Bin sooo neugierig (bzw. freue mich über abgefahrene Dinge im *).
Das könnte er bestimmt, aber vielleicht müsste er uns dann töten. :) :beerdigu:
 
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"
 
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.