DIAdem-Version: 11 DIAdem-Sprachversion: DE DIAdem Erfahrung seit: 2011
Beiträge: 30
Themen: 7
Registriert seit: Mar 2011
Mein Problem mit chnfind()
[/code]Hallo zusammen!
Falls jemand kurz Zeit hat, das Skript auszutesten, wäre ich wirklich dankbar. Ich bin nämlich mit meinem Latein am Ende....
Hier mal der Code:
Code:
Option Explicit
dim zeit,i
for i = 1 to groupcount
set zeit=Data.Root.ChannelGroups(i).Channels("RecordTimestamp")
msgbox "Gruppe "&i&" 199.Wert: "&zeit(199)&" nächster Wert bei Nr. "& chnfind("Ch("""&zeit.name&""") > "& str(zeit(199)))
' set zeit = nothing
next
Erwarten würde ich mir ja jedesmal Nr.200 als nächsthöheren Datumswert (bzw bei Gruppe 4 die 205), aber irgenwie ist da der Wurm drin...
Edit: das schaut zwar ein bissl besser aus, tut's aber immer noch nicht
Code:
dim zeit,i,j,k
for i = 1 to groupcount
set zeit=Data.Root.ChannelGroups(i).Channels("RecordTimestamp")
j = CNoXGet(i,1)
k = chnfind("Ch("&j&") >"& str(zeit(199)))
msgbox "Gruppe "&i&" 199.Wert: "&zeit(199)&" nächster Wert bei Nr. "& k
set zeit = nothing
next
Edit2, neuer Versuch, immer noch kein Glück...
Code:
for i = 1 to groupcount
set zeit=Data.Root.ChannelGroups(i).Channels("RecordTimestamp")
msgbox "Gruppe "&i&" Datum Zl. 199: "&zeit(199)& vbcrlf& " nächstes Datum: " & zeit(chnfind("Ch(""["&i&"]/RecordTimestamp"") > "& str(zeit(199))))
set zeit = nothing
next
DIAdem-Version: 11 DIAdem-Sprachversion: DE DIAdem Erfahrung seit: 2011
Beiträge: 30
Themen: 7
Registriert seit: Mar 2011
RE: Mein Problem mit chnfind()
Hallo MBT
Ziel des Skripts ist ansich gar keines - das einzige was ich versuche, ist einen Zeitkanal mit chnfind() zu durchsuchen. Nachdem ja die angehängten Zeitkanäle 1-3 (beim 4. habe ich ein bisschen rumgespielt), streng monoton ansteigend sind, erwarte ich mir, daß chnfind die Zeilennummer des nächsthöheren Zeitwerts nach Nr. 199 angibt => das wäre dann Zeile 200 ... klappt aber nicht, bzw. nur beim ersten Kanal.
Meine Frage: Wie muss ich den String aufbauen, daß chnfind das tut was ich will (oder meiner Meinung nach, das tut was es soll)?
DIAdem-Version: 2010 DIAdem-Sprachversion: DE DIAdem Erfahrung seit: 2011
Beiträge: 4
Themen: 1
Registriert seit: Aug 2012
RE: Mein Problem mit chnfind()
Hallo baboocopter,
zwei Dinge die mir spontan aufgefallen sind. Ich glaube, es ist nicht gerade viorteilhaft, dass du die Set-Anweisung in deiner Schleife stehen hat. Zweitens Du muss dem ChnFind-Befehl etwas auf die "Sprünge" helfen, sonst findet DIAdem imm nur die erste Stelle...
Ich habe Dir hier mal ein Beispiel von mir hineinkopiert
Code:
L21 = 1
Do While L21 < ChnLength("Kanal1")
If L21 = 0 Then 'Endebedingung für Do...Loop-Anweisung
Exit Do
End If
on error resume next
Die Schleife geht bei mir Datenkanäle durch die 89 Mio. Zeilen haben. Immer wenn im Kanal2 ein 2 drin steht wird der Wert aus Kanal3 in Kanal 4 kopiert. Wichtig ist, dass am Ende Zeile1 = L21 + 1 steht. Das ist der "Sprung" für ChnFind die nächste Stelle zu suchen.
DIAdem-Version: 11 DIAdem-Sprachversion: DE DIAdem Erfahrung seit: 2011
Beiträge: 30
Themen: 7
Registriert seit: Mar 2011
RE: Mein Problem mit chnfind()
Guten Morgen Brotfahrer!
Danke für Deine Antwort. Noch kurz zur Erklärung meiner Vorgehensweise: die "set"-Anweisung steht hier, damit ich die objektorientierte Vorgehensweise von DIAdem nutzen kann. (Persönlich komme ich mit den CL, CHDX etc -Geschichten nicht so klar...)
D.h. für mich ist "zeit(199)" an und für sich das gleiche wie CHV(199,1) ...bisher hat das auch so hingehauen...
Warum die Variablen bei jedem neuen Schleifendurchgang nicht neu eingerichtet werden (ist dem überhaupt so?) ist mir ein Rätsel.
"Auf die Sprünge helfen" mag ich chnfind ja gar nicht! Ich möchte nur die Zeilennummer wissen, an der der nächstgrößere Datums/Zeitwert nach dem in Zeile 199 steht. Wenn ich mir die Kanäle im View anschaue, sollte das die 200 sein...
Schöne Grüße, bc
Edit:
Jetzt hab nocheinmal ein bissl rumgetan... chnfind kommt wohl tatsächlich nicht mit der "set"-Geschichte klar, v.a. wenn die Kanäle trotz unterschiedlicher Kanalgruppe den gleichen Namen haben (was das Kanalgruppenkonzept irgendwie überflüssig macht...)
etwas besser, aber immer noch mit einem Wurm drin....
Code:
dim i,zeit
for i = 1 to groupcount
msgbox suchen(i)
next
function suchen(i)
dim zeit
zeit = chv(199,"["& i &"]/RecordTimestamp")
suchen = chnfind("ch(""["& i &"]/RecordTimestamp"") > "& str(zeit) &"")
end function
DIAdem-Version: 11 DIAdem-Sprachversion: DE DIAdem Erfahrung seit: 2011
Beiträge: 30
Themen: 7
Registriert seit: Mar 2011
RE: Mein Problem mit chnfind()
Falls jemand ein ähnliches Problem hat:
"Walter Rick" hat's mir kurz und knapp (und dennoch verständlich) erklärt (interessant auch der Unterschied zwischen chv und chd)