Zu unterem Thema habe ich jetzt herausgefunden, dass es an der Formatierung des .name() liegen muss.
Ersetze ich die Variable für device.name() testweise durch eine Zeichenkette...
string o_geraet = "Ping:3";
...so funktioniert alles perfekt.
Es ist also klar, dass es am Inhalt (Wert/Art/Typ) der Variable liegt, die offensichtlich immer und überall "Ping:3" zeigt, aber u.U. der ASCII-Code etc. unterschiedlich ist.
...ich bin noch am Testen, was UriEncode mir sagt... puh
Hallo Leute.
So langsam komm ich mir echt dämlich vor.
Seit Jahren schreibe ich die teils komplexesten Programm (z.B. eigene Fußbodenzeitungs-Steuerung, die damals noch gar nicht von Haus aus möglich war), und nun stehe ich vor einem scheinbar trivialen Problem, dass meine einfachsten Versuche nicht fruchten...
Also - ich mach über CUx virtuellem Gerät Ping-Abfragen zu diversen Geräten - funzt auch prima.
In einem Script möchte ich basierend auf Änderung (Ping kommt nicht zurück) lediglich abfragen, welches (virtuelle) Gerät das Script anwirft und demnach NUR einer Variable einen Namen verpassen.
Etwas reduziert und aufs wesentliche sieht das Script so aus:
Code: Alles auswählen
object o_src = dom.GetObject("$src$");
if(o_src)
{
string o_geraet = dom.GetObject(o_src.Device()).Name();
}
else
{
string o_geraet = "(Test, Programm manuell gestartet)";
}
integer valSuche;
string o_geraet_Name = "NoName";
! BIS HIER HER IST ALLES GUT
if(o_geraet.Find("1") >= 0)
{
integer valSuche = o_geraet.Find("1");
string o_geraet_Name = "WR1";
}
! ...weitere "IF's"
o_geraet ist immer korrekt.
(o_geraet kann z.B. Werte haben wie "Ping:1", "Ping:2" usw.)
Problem ist:
valSuche ist IMMER = o_geraet und NICHT die gefundene Position oder true/false.
Auch mit Contains erhalte ich in Variable valSuche kein True/False, sondern auch nur o_geraet - also den Namen, auch wenn ich der valSuche einen anderen Typ zuweise.
o_geraet_Name bleibt immer "NoName"
Zeitweise hatte ich es hinbekommen, dass überhaupt ein IF anspringt, dann war es aber das falsche, nämlich immer das letzte, vmtl. weil jede gültig war bis zum Durchlauf aller.
Lösungsansätze:
Ich hatte schon ALLES auf ToString(0) ...oder ohne Parameter versucht, kein Unterschied.
...ALLES bedeutet wirklich alles, z.B. auch im Find ( o_geraet.Finde("1").ToString(0) )
Wohl gemerkt, auch mit z.B...
if(o_geraet.ToString(0).Contains("1".ToString(0)) == true)
...egal ob mit oder ohne Parameter 0 funktioniert es nicht.
Wo mache ich denn hier einen fatalen Anfänger-Fehler?
Das ":" in z.B. "Ping:1" kann ja nicht das Problem sein, hier müsste ich nicht "escapen", uns selbst wenn, dann wäre manches Verhalten trotzdem nicht korrekt.
Die Doku gibt mir hier keine Aufschluss.