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 ?
 

Hupe

Aktives Mitglied
Mitglied seit
8 Apr 2004
Beiträge
2,586
Punkte für Reaktionen
0
Punkte
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?
 

betateilchen

Grandstream-Guru
Mitglied seit
30 Jun 2004
Beiträge
12,882
Punkte für Reaktionen
0
Punkte
0
Wo die Daten herkommen, ist mehr oder weniger flexibel. Im Moment kommen die aus Asterisk.
 

Hupe

Aktives Mitglied
Mitglied seit
8 Apr 2004
Beiträge
2,586
Punkte für Reaktionen
0
Punkte
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).
 

Hupe

Aktives Mitglied
Mitglied seit
8 Apr 2004
Beiträge
2,586
Punkte für Reaktionen
0
Punkte
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.
 

allesOK

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

Hupe

Aktives Mitglied
Mitglied seit
8 Apr 2004
Beiträge
2,586
Punkte für Reaktionen
0
Punkte
0
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:
 

betateilchen

Grandstream-Guru
Mitglied seit
30 Jun 2004
Beiträge
12,882
Punkte für Reaktionen
0
Punkte
0
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"
 

betateilchen

Grandstream-Guru
Mitglied seit
30 Jun 2004
Beiträge
12,882
Punkte für Reaktionen
0
Punkte
0

3CX PBX - GRATIS
Linux / Win / Cloud

Statistik des Forums

Themen
232,861
Beiträge
2,027,471
Mitglieder
350,964
Neuestes Mitglied
fele24078