From Friday, April 19th (11:00 PM CDT) through Saturday, April 20th (2:00 PM CDT), 2024, ni.com will undergo system upgrades that may result in temporary service interruption.

We appreciate your patience as we improve our online experience.

DIAdem

cancel
Showing results for 
Search instead for 
Did you mean: 

Zeilen löschen

Hi,

ich möchte Zeilen aus meiner Tabelle in VIEW löschen. Mein Script habe ich folgendermaßen geschrieben:
....
do while(n <= ChnLength(335))
    x=CHDX(n,335)
    if (x <> 5) then
        Call DATABLDEL("335,337-407",n,1)            
   else
       n=n+1
   end if
loop

....

Aber das wird extrem langsam ausgeführt bei einer Gesamtanzahl von ~ 40000 Zeilen.

Außerdem mit dem Befehl  "Table.Rows.Remove  n"  anstelle  von  "Call DATABLDEL("335,337-407",n,1)" bekomme ich die Fehlermeldung "Das Objekt unterstützt diese Eigenschaft oder Methode nicht.: 'Rows'".

1) Wäre es möglich das Script im 1. Fall schneller ausführen zu lassen?
2) Ansonsten mit welchem Befehl in DIAdem v.10 kann ich Zeilen aus einer Tabelle löschen?

Danke.

Gruß



Patrick Etoumann
0 Kudos
Message 1 of 3
(4,817 Views)

Hallo Patrick!

Das sollte man mit zwei DIAdem Befehlen deutlich schneller hinbekommen. 1. Schritt dazu ist im Bedingungskanal 335 alle zu löschenden Zeilen mit NoValue zu kennzeichnen. Mit einem kleinen Trick macht das der DIAdem Formelinterpreter mit dem Befehl FormulaCalc in dem man jeden Wert durch das Vergleichsergebnis teilt. Ist der Vergleich nicht erfüllt so ist der Wert 0 ansonsten 1. Eine Division durch 0 führt zu einem NoValue, durch 1 erhält den Originalwert. Damit das für dich richtig ist muss nur aus x <> 5 ein x = 5 werden. Der 2. Schritt ist dann alle Zeilen mit einem NoValue im Vergleichskanälen und den zugeordneten Kanälen zu löschen. Dazu gibt es den Befehl ChnNovHandle. Der macht das dann auch für die zugeordneten Kanäle und kann das Ergebnis in den Ursprungskanälen speichern.

Das sieht dann in Code gegossen so aus:

Call FormulaCalc("Ch(335) := Ch(335) / (Ch(335) = 5)")
Call ChnNovHandle(355,"337-407","Delete","XY",1,0)

Sicherlich nicht leicht lesbar, aber probiere es mal aus

Matthias

Matthias Alleweldt
Project Engineer / Projektingenieur
Twigeater?  
0 Kudos
Message 2 of 3
(4,806 Views)

Hi Matthias,

Danke für deinen Tipp.Es hat gut funktioniert.

Ich hatte auch einen Script geschrieben mit ~10 Zeilen, aber mit diesem 2-Zeilen Script ist es viel einfacher.

Gruß.

Patrick

Patrick Etoumann
0 Kudos
Message 3 of 3
(4,792 Views)