DIAdem

cancel
Showing results for 
Search instead for 
Did you mean: 

Anfängerschwierigkeiten?

Hallo,

 

hier ist eine kleine Sequenz, die beim Ausführen kein Ende findet.

 

Der Kanal „test“ ist nur 100 Werte von 1 bis 50 groß.

Berechnet werden sollen alle Werte, die über 45 sind.

Das Ergebnis soll in einem neuen Kanal „neg_U_Sprung“ in der ersten Zeile gespeichert werden.

 

Call ChnAlloc("neg_U_Sprung")

    

dim negSprung, anzahlSprung

negSprung=1: anzahlSprung=0

 

do

      negSprung = chnfind("ch(""[1]/test"")>45", negSprung)

          if negSprung >0 then

          anzahlSprung = anzahlSprung +1

          end if

     

loop until negSprung >= cl("[1]/test")

 

chnval(1,"neg_U_Sprung") = anzahlSprung

 

was mache ich falsch?

 

Gruß,

a6a

 

0 Kudos
Message 1 of 7
(3,620 Views)
Hallo a6a,

hier ein kleiner Auszug aus der DIAdem-Hilfe:

Rückgabewert vom Typ Integer-Variable. Liefert die Nummer der ersten Zeile, die die angegebene Bedingung erfüllt. Wenn keine Zeile des Datenkanals die Bedingung erfüllt, liefert der Befehl ChnFind das Ergebnis 0.

Gruß
Walter
0 Kudos
Message 2 of 7
(3,615 Views)

ich habe es mehr mals gelesen.

leider bring es mich nicht weiter.

ich sehe keinen logik fehler hier.

0 Kudos
Message 3 of 7
(3,604 Views)
Hallo 6a6!
 
Anfängerschwierigkeiten? Nein und Ja!
 
zu Nein: Leider hat Walter mit seiner Antwort, aber auch die DIAdem Hilfe unrecht! Mit der Einführung des Befehls in DIAdem 10 wurde die Hilfe von dem bis dahin schon vorhandenen Befehl 'find' kopiert, nur leider verhalten sich die beiden Befehle nicht gleich. Bei chnfind mit Angabe eines Startindex größer der Kanallänge wird, wenn der letzte Wert im Kanal die Bedingung erfüllt, die Kanallänge zurückgegeben. Das Verhalten macht m.E. zwar keinen Sinn aber ist so! (Bug?) Das kann ein Anfänger wirklich nicht wissen Smiley Wink
 
zu Ja: Nun ist aber noch zusätzlich ein kleiner Fehler in deinem Code. Du rufst den chnfind mit negSprung als Startindex auf. So wird aber immer wieder die selbe Stelle gefunden. Es muss negSprung+1 dort stehen und negSprung deshalb mit 0 initialisiert werden.
 
Mit dem Wissen können wir nun eine lauffähige Version machen:
Call ChnAlloc("neg_U_Sprung")

dim negSprung, anzahlSprung

negSprung=0: anzahlSprung=0

do
  negSprung = chnfind("ch(""[1]/test"")>45", negSprung+1)

  if negSprung >0 then
    anzahlSprung = anzahlSprung +1
  end if

loop until (negSprung=0) or (negSprung >= cl("[1]/test"))

chnval(1,"neg_U_Sprung") = anzahlSprung
 
Matthias
Matthias Alleweldt
Project Engineer / Projektingenieur
Twigeater?  
Message 4 of 7
(3,596 Views)
Hallo a6a, Matthias,

dieser spezielle Fall, dass der Startindex größer ist als Kanallänge und der letzter Wert im Kanal die Bedingung erfüllt und als Ergebnis die Kanallänge zurückgegeben wird, ist nicht das was man erwarten würde. Hier würde ich eine Null erwarten. Ich werde das bei uns in der Entwicklungsprozess einsteuern. Als Work-Around empfehle ich vorher zu prüfen, ob der Startindex größer ist als die Kanallänge.

Gruß
Walter

Übrigens ist die Hilfe korrekt und nicht einfach nur kopiert worden. Der Fall, dass der Startindex größer als die Kanallänge ist wird bisher nicht beschrieben.
0 Kudos
Message 5 of 7
(3,589 Views)

Danke Matthias.

 

Wie verhält sich chnfind,

wenn in einem Kanal überwiegend novalies sind und

alle anderen Werte unterliegen der Bedingung?

 

D.h, mein Kanal besteht aus Novalues und alle andere Werte, die

im Kanal vorhanden sind, werden von chnfind gefunden, da sie der

Bedingung entsprechen.

 

Habe den Skript laufen lassen und Diadem gibt mir als anzahlSprung

die Länge des Kanals („test“).

Offensichtlich berechnet er die Novalues mit.

 

Ist es möglich?

 

LG,

a6a

0 Kudos
Message 6 of 7
(3,583 Views)
Hallo 6a6!
 
Das kann ich leider nicht nachvollziehen. Bei meinem Test mit deinem Code werde sie nicht mit gezählt.
 
Wenn du aber die Werte ungleich NOVALUE zählen willst kannst du ja mal den chnfind Ausdruck in negSprung = chnfind("not IsNull(ch(""[1]/test""))", negSprung+1) ändern und nochmal testen.
 
Matthias
Matthias Alleweldt
Project Engineer / Projektingenieur
Twigeater?  
0 Kudos
Message 7 of 7
(3,578 Views)