INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.




Unsere Partner:

DIAdem-Forum.de Partner

DIAdem-Forum.de Partner






Stellenangebote:
Wissenschaftlicher Referent Datenanalyse Glasherstellungsprozesse (m/w)
Mainz

Ingenieur / Techniker Prüfstände (m/w) Testsysteme für die Automobilentwicklung
Brand-Erbisdorf bei Freiberg

Projektleiter (m/w) Fahrzeug-Visualisierungsdatensatz / Baureihenhead
Leinfelden-Echterdingen

Softwareingenieur Visualisierung (w/m)
Hessdorf

Softwareentwickler (m/w) 3D-Echtzeitvisualisierung / Mathematica
Ulm





.
 
Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5

Mein Problem mit chnfind()
22.08.2012, 08:58, (Dieser Beitrag wurde zuletzt bearbeitet: 22.08.2012, 12:37 von bamboocopter.)
#1
DIAdem-Version: 11
DIAdem-Sprachversion: DE
DIAdem Erfahrung seit: 2011
Sad  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



Angehängte Dateien
.tdx   test.tdx (Größe: 243,91 KB / Downloads: 227)
.tdm   test.tdm (Größe: 9,7 KB / Downloads: 247)
Antworten
23.08.2012, 06:19,
#2
DIAdem-Version: 2010, 2011, 2012, 2015
DIAdem-Sprachversion: DE/EN
DIAdem Erfahrung seit: 2009
RE: Mein Problem mit chnfind()

Hallo,

ich verstehe nicht ganz was du mit deinem Skript bewirken möchtest.
Erkläre doch mal kurz was das eigentliche Ziel sein soll.


Gruß MBT

Antworten
26.08.2012, 16:08,
#3
DIAdem-Version: 11
DIAdem-Sprachversion: DE
DIAdem Erfahrung seit: 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)?

Antworten
27.08.2012, 16:10, (Dieser Beitrag wurde zuletzt bearbeitet: 27.08.2012, 16:11 von Brotfahrer.)
#4
DIAdem-Version: 2010
DIAdem-Sprachversion: DE
DIAdem Erfahrung seit: 2011
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
          
          L21 =  ChnFind("ch(""Kanal2"")=2",Zeile1)
          Call DataBlInsert(oMyData.Channels("Kanal3),L21,1,"Kanal4",1)
      
        Zeile1 = L21 + 1
    Loop

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.

Gruß
brotfahrer

Antworten
28.08.2012, 07:55, (Dieser Beitrag wurde zuletzt bearbeitet: 28.08.2012, 08:27 von bamboocopter.)
#5
DIAdem-Version: 11
DIAdem-Sprachversion: DE
DIAdem Erfahrung seit: 2011
Sad  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....Angry

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

Antworten
03.09.2012, 14:38,
#6
DIAdem-Version: 11
DIAdem-Sprachversion: DE
DIAdem Erfahrung seit: 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)

forums.ni.com

sg,
bc

Antworten


Möglicherweise verwandte Themen...
Thema Verfasser Antworten Ansichten Letzter Beitrag
  Dialog Editor EditBox Komma-Problem MBT 2 268 13.12.2017, 14:51
Letzter Beitrag: MBT
  Problem „STATBLOCKCALC“ Parameter“ StatResChn“ Vektorhektor 1 4.155 18.05.2017, 06:27
Letzter Beitrag: grisu
  Punkt/Komma-Problem MBT 0 2.392 15.11.2016, 13:28
Letzter Beitrag: MBT
  ChnFind bzw. Find Problem mit Str(... MichiR 2 5.147 24.05.2014, 13:33
Letzter Beitrag: MichiR
  ChnFind Werte zwischen zwei Variablen stellan 0 3.745 19.04.2014, 13:50
Letzter Beitrag: stellan
  Problem: Aufruf von Konstante in Formel p2b 2 5.476 05.11.2012, 09:34
Letzter Beitrag: p2b
  Problem mit DataFileHeader SolarMan 0 3.414 25.06.2012, 17:33
Letzter Beitrag: SolarMan
  Problem mit Zeitkanälen - Angabe von Millisekunden und Datumswechsel stopp 4 7.039 01.12.2011, 13:47
Letzter Beitrag: chaosyeti
  [ERLEDIGT] DIAdem-Anfänger mit Problem olav123 2 5.625 22.10.2010, 08:13
Letzter Beitrag: Bruno
  ActiveX Month View - Klick Problem karom 3 8.971 18.12.2009, 18:19
Letzter Beitrag: Bruno

Gehe zu: