Dubletten entfernen
Moderator: Moderatoren
Re: Dubletten entfernen
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
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
Re: Dubletten entfernen
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:
gruß
sven-my
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"
sven-my
win7 prof / AOO 4.1.2 & AOO 3.4.0 portable
Re: Dubletten entfernen
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.
Erreicht das Makro die Zeile
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
dann werden alle Controller zumindest nach dem nächsten erfolgreichen Durchlauf des Makros wieder freigegeben.
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.
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.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.
Erreicht das Makro die Zeile
Code: Alles auswählen
oDoc.unlockControllers
Im Zweifelsfalle kannst Du die Anweisung abändern in
Code: Alles auswählen
Do While oDoc.hasControllersLocked
oDoc.unlockControllers
Loop
Re: Dubletten entfernen
Hallo DPunch,
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
wird schwierig, denn das Dokument ist recht groß, mal sehen, ob ich es morgen "eindampfen" kann.DPunch hat geschrieben:Vielleicht könntest Du mal eine Beispieldatei hochladen, damit wir wenigstens auf gleicher Basis vergleichen.
Was, bitte schön, ist ein Typo ?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.
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
Re: Dubletten entfernen
Aloha
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.
Ein Vertipper.sven-my hat geschrieben:Was, bitte schön, ist ein Typo ?
Diese Hinweisemeldung wirst Du da nicht bekommen.sven-my hat geschrieben:Das wäre mir durch die Hinweismeldung aufgefallen [Das Programm muß neu gestartet werden...].
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.
Re: Dubletten entfernen
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
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 (8.38 KiB) 897 mal betrachtet
win7 prof / AOO 4.1.2 & AOO 3.4.0 portable
Re: Dubletten entfernen
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
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
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
"*100))/100" -> für zwei Nachkommastellen
gruß
sven-my
win7 prof / AOO 4.1.2 & AOO 3.4.0 portable
-
- *****
- Beiträge: 355
- Registriert: So, 09.05.2010 12:37
Re: Dubletten entfernen
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
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
Re: Dubletten entfernen
Hallo
Wahrscheinlich hast du gleiche Daten unterschiedlich formatiert ?
Das macht für die vorgestellten Makros einen Unterschied.
Karo
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)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
-
- *****
- Beiträge: 355
- Registriert: So, 09.05.2010 12:37
Re: Dubletten entfernen
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
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
Re: Dubletten entfernen
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
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)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
-
- *****
- Beiträge: 355
- Registriert: So, 09.05.2010 12:37
Re: Dubletten entfernen
Hallo Karolus,
funzt!
Danke!
funzt!
Danke!
Lernbegieriger Nutzer mit (hoffentlich) steigendem Wissen