Dubletten entfernen

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

Benutzeravatar
sven-my
*****
Beiträge: 358
Registriert: Fr, 14.12.2007 19:56

Re: Dubletten entfernen

Beitrag von sven-my »

Hallo alle zusammen,

jetzt habe ich vier Mal die Tabelle (A1 - J530 / ca. 10% Doubletten) durchforsten lassen, bei der DPunch's Code so lange brauchte.

Dabei ergaben sich Zeiten für das Zeilenlöschen zwischen 540E-5sec und 630E-5sec. (Maßeinheit geändert !)

Was da gestern los war - ein Rätsel !

gruß
sven-my
win7 prof / AOO 4.1.2 & AOO 3.4.0 portable
Benutzeravatar
sven-my
*****
Beiträge: 358
Registriert: Fr, 14.12.2007 19:56

Re: Dubletten entfernen

Beitrag von sven-my »

Hallo DPunch,

eine Erklärung für den übermäßigen Zeitbedarf sehe ich in der Tatsache, daß die Tabelle, die ich nach Doubletten durchsucht habe, reichlich VERWEISE beinhaltet, und fünf andere Tabellenblätter per VERWEIS auf dieses Tabellenblatt zugreifen.

Was aber noch dazu kommt, ist, daß die im Makro gemessene Zeit nicht mit der Zeit übereinstimmt, die vom Aufruf des Makros bis zu dem Zeitpunkt, zu dem man weiterarbeiten kann, vergeht, recht unterschiedlich sind.

Innerhalb des Makros habe ich 127msec gemessen, mit einer Stopuhr in der Hand, verging vom Anklicken des Buttons für das Makro, bis zu Anzeige der msgbox mit der Zeitanzeige, ganze 2min38sec.

Gemessen habe ich so:

Code: Alles auswählen

       oDoc = thisComponent
aZ = now
       oDoc.lockControllers

Code: Alles auswählen

       oDoc.unlockControllers
eZ = now
vZ = (fix((eZ - aZ)*86400*1000))/1000
msgbox "fertig nach " & vZ & " msec"
gruß
sven-my
win7 prof / AOO 4.1.2 & AOO 3.4.0 portable
DPunch
*******
Beiträge: 1112
Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg

Re: Dubletten entfernen

Beitrag von DPunch »

Aloha

Ich kann zwar reproduzieren, dass der Vorgang durch eine große Anzahl von Verweisen erheblich länger dauert, aber auf derart lange Zeiten wie Du komme ich trotzdem nicht.
Das bewegt sich dann im Bereich von 1-3 Sekunden bei einer sehr großen Anzahl von Verweisen, statt der 34 ms vorher.

Vielleicht könntest Du mal eine Beispieldatei hochladen, damit wir wenigstens auf gleicher Basis vergleichen.
sven-my hat geschrieben:UND eine neues Phänomen ist aufgetreten : starte ich das Makro mehrmals hintereinander, wird die Anzeige nicht mehr aktualisiert; erst wenn ich auf ein anderes Tabellenblatt gehe, und dann wieder zurück, habe ich die aktuelle Ansicht.
Das tritt nur auf, wenn Du das Makro einmal nicht hast durchlaufen lassen, z.B. weil Du einen Typo hattest, als Du die MsgBox-Zeile in den Code eingefügt hast und das Makro mit einer entsprechenden Fehlermeldung abgebrochen wird.
Erreicht das Makro die Zeile

Code: Alles auswählen

oDoc.unlockControllers
nicht, bleiben die Controller des Dokuments bis zum nächsten Neuladen gesperrt - diese sind z.B. zuständig für das Aktualisieren von Anzeigen im Dokument.
Im Zweifelsfalle kannst Du die Anweisung abändern in

Code: Alles auswählen

Do While oDoc.hasControllersLocked
  oDoc.unlockControllers
Loop
dann werden alle Controller zumindest nach dem nächsten erfolgreichen Durchlauf des Makros wieder freigegeben.
Benutzeravatar
sven-my
*****
Beiträge: 358
Registriert: Fr, 14.12.2007 19:56

Re: Dubletten entfernen

Beitrag von sven-my »

Hallo DPunch,
DPunch hat geschrieben:Vielleicht könntest Du mal eine Beispieldatei hochladen, damit wir wenigstens auf gleicher Basis vergleichen.
wird schwierig, denn das Dokument ist recht groß, mal sehen, ob ich es morgen "eindampfen" kann.
DPunch hat geschrieben:Das tritt nur auf, wenn Du das Makro einmal nicht hast durchlaufen lassen, z.B. weil Du einen Typo hattest, als Du die MsgBox-Zeile in den Code eingefügt hast und das Makro mit einer entsprechenden Fehlermeldung abgebrochen wird.
Was, bitte schön, ist ein Typo ?

Das wäre mir durch die Hinweismeldung aufgefallen [Das Programm muß neu gestartet werden...]. Ich habe immer erst am Makro was geändert, wenn die letzte MSGBOX (Zeit-Anzeige) zu sehen war. Außerdem habe ich zwischen >oDoc.lockControllers< und >oDoc.unlockControllers< zuerst im Test-Dokument etwas geändert, und wenn es dort ohne Fehlermeldung lief, rüberkopiert (ich bin nun mal kein großer, kaum ein kleiner, Basic-Programierer - daher etwas übervorsichtig).

gruß
sven-my
win7 prof / AOO 4.1.2 & AOO 3.4.0 portable
DPunch
*******
Beiträge: 1112
Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg

Re: Dubletten entfernen

Beitrag von DPunch »

Aloha
sven-my hat geschrieben:Was, bitte schön, ist ein Typo ?
Ein Vertipper.
sven-my hat geschrieben:Das wäre mir durch die Hinweismeldung aufgefallen [Das Programm muß neu gestartet werden...].
Diese Hinweisemeldung wirst Du da nicht bekommen.
Der Effekt, den Du schilderst, weist jedenfalls recht eindeutig darauf hin, dass Du (mindestens) einmal das Makro gestartet hattest, es aber nicht bis zum Ende durchgelaufen ist - warum auch immer.
Benutzeravatar
sven-my
*****
Beiträge: 358
Registriert: Fr, 14.12.2007 19:56

Re: Dubletten entfernen

Beitrag von sven-my »

Hallo DPunch,

mit aller Gewalt habe ich das Tabellen dokument abgespeckt, aber unter 478kB (von 845kB) bekomme ich es nicht gedrückt, ohne es zu sehr zu verändern.

Das ist die Meldung, die ich weiter oben meinte, d.h. die Meldung, wenn ich in einem laufenden Makro etwas ändern wollte.

gruß
sven-my
Dateianhänge
Clipboard.jpg
Clipboard.jpg (8.38 KiB) 915 mal betrachtet
win7 prof / AOO 4.1.2 & AOO 3.4.0 portable
Benutzeravatar
sven-my
*****
Beiträge: 358
Registriert: Fr, 14.12.2007 19:56

Re: Dubletten entfernen

Beitrag von sven-my »

Hallo an Alle,

nun bin ich dahinter gekommen, weshalb die per Stopuhr gemessene Zeit (von sven-my » 18.12.2011, 16:21 ) nicht mit der vom Makro angezeigten Zeit übereinstimmt hat : DENKFEHLER !

siehe hier:
http://de.wikipedia.org/wiki/Dezimalzeit Überschrift: Umrechnen

Code: Alles auswählen

Sub Main
msgbox "Start"
aZ = now


msgbox "Ende"
eZ = now
vZ = eZ - aZ
msgbox vZ
vZr = (fix((eZ - aZ)*86400*100))/100
msgbox vZr & " sec"
End Sub
Die Zahl "vZ" in ein Tabellenblatt, und >MM:SS,00< formatiert ergibt genau die Zeit in "vZr"

"*100))/100" -> für zwei Nachkommastellen

gruß
sven-my
win7 prof / AOO 4.1.2 & AOO 3.4.0 portable
theindless
*****
Beiträge: 355
Registriert: So, 09.05.2010 12:37

Re: Dubletten entfernen

Beitrag von theindless »

Hallo,

nachdem ich vor kurzem ebenfalls versucht habe, das Dubletten-Problem zu lösen (funktioniert auch einigermaßen) bin ich über diesen Thread gestolpert.

Bei meinen Tests hat das Macro von DPunch aber nur mit Zahlen und nicht mit Daten (=Mehrzahl von Datum), wie von mir benötigt, funktioniert.

Mache ich was falsch oder geht das einfach nicht?

theindless
Lernbegieriger Nutzer mit (hoffentlich) steigendem Wissen
Karolus
********
Beiträge: 7535
Registriert: Mo, 02.01.2006 19:48

Re: Dubletten entfernen

Beitrag von Karolus »

Hallo

Wahrscheinlich hast du gleiche Daten unterschiedlich formatiert ?
Das macht für die vorgestellten Makros einen Unterschied.

Karo
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
theindless
*****
Beiträge: 355
Registriert: So, 09.05.2010 12:37

Re: Dubletten entfernen

Beitrag von theindless »

Hallo Karolus,

ich hatte nur zu Testzwecken in die Zellen A1:A4 folgendes eingegeben:

01.01.12
01.02.12
01.02.12
01.03.12

und das hat nicht funktioniert.
Ich habe das nochmals getestet und die Daten extra nochmals einheitlich formatiert.
-> funktioniert immer noch nicht.

theindless
Lernbegieriger Nutzer mit (hoffentlich) steigendem Wissen
Karolus
********
Beiträge: 7535
Registriert: Mo, 02.01.2006 19:48

Re: Dubletten entfernen

Beitrag von Karolus »

Hallo
Formatiere die Spalte mit 4stelliger Jahresanzeige dann tut es!

( .getString() setzt das vollständige Datum mit 4stelliger Anzeige ein, aber die "suchen und Ersetzen"-methode vergleicht dann mit den "sichtbaren" Einträgen der anderen Zellen. )
Karo
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
theindless
*****
Beiträge: 355
Registriert: So, 09.05.2010 12:37

Re: Dubletten entfernen

Beitrag von theindless »

Hallo Karolus,

funzt!

Danke!
Lernbegieriger Nutzer mit (hoffentlich) steigendem Wissen
Antworten