🙏 Helfen Sie jetzt mit, unser LibreOffice Forum zu erhalten! 🙏
Mit Ihrer Spende sichern Sie den Fortbestand, den Ausbau und die laufenden Kosten dieses Forums. 🌱

🍀 Jeder Beitrag zählt – vielen Dank für Ihre Unterstützung!🍀

❤️ DANKE >> << DANKE ❤️

>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

Programmplanung bzw. -Übersicht

Alles zur Programmierung im LibreOffice.
step
Beiträge: 30
Registriert: Sa 12. Jan 2013, 20:50

Programmplanung bzw. -Übersicht

Beitrag von step » Di 26. Nov 2013, 12:50

Hallo *-Office Gemeinde,

ich kann mein erstes Makro nun bald als "in etwa fertig" bezeichnen.
Von Planung war da leider wenig zu sehen, mehr "ich nutze das was funktioniert",
und der Rest lief mehr oder weniger im Kopf ab.

Da die wesentlichen Programmzwecke funktionieren, möchte ich
es etwas übersichtlicher machen.

Wie macht Ihr das?

Gruß step
LibreOffice 3.6.2.2 unter Linux Suse 11.3
Schwerpunkt: Makroprogrammierung von Draw
Zuletzt geändert von step am Mi 8. Apr 2015, 19:23, insgesamt 1-mal geändert.
Windows 7 - LibreOffice 3.5.7
Debian 7.8.0 KDE - LibreOffice 3.5.5

Koto
Beiträge: 19
Registriert: Do 30. Aug 2012, 17:05

Re: Programmplanung bzw. -Übersicht

Beitrag von Koto » Di 26. Nov 2013, 16:33

Hallo,
du kannst zusammenhängende Programmteile in Methoden unterbringen. Es gibt zwei möglichkeiten:

Code: Alles auswählen

REM Ohne Rückgabe
SUB sagEtwas (Etwas AS STRING)
   msgbox Etwas
END SUB

REM Mit Rüchgabe
FUNCTION sagNix (Etwas AS STRING) AS STRING
   DIM S AS STRING
   
   S = "Ich selber sage nicht "
   sagNix = S & Etwas
END FUNCTION

REM Aufruf der Methoden
SUB main ()
  REM Ohne Rückgabe ausführen der Aufgabe
  sagEtwas ("Hallo")
  
   REM mit Rückgabe nach Ausführung der Aufgabe
  msgbox sagNix ("Hallo")
END SUB
Auf diese Weise kann man das Makro gliedern und kommentieren. Wiederholte Aufgaben werden einfacher gelöst. Methoden lassen sich sammeln und wieder verwenden. Das wäre etwas übersichtlicher.

Zudem kann man mit Modulen und Bibliotheken Ordnung ins Geschehen bringen, wenn das Makro umfangreicher wird.

gogo
* LO-Experte *
Beiträge: 1081
Registriert: Sa 5. Feb 2011, 19:07

Re: Programmplanung bzw. -Übersicht

Beitrag von gogo » Di 26. Nov 2013, 18:59

sieh Dir mal dieses Makro von Koto an: http://www.libreoffice-forum.de/viewtop ... 691#p24854
da wirst Du Dich auch in 10 Jahren noch zurechtfinden.

Solltest Du eine große Anwendung planen (>50-80 Makros) dann empfiehlt es sich auf alle Fälle eine eigene Makro-Extension zu erstellen - damit wird von Anfang an richtig referenziert, und man braucht in der Regel nachher keine gröberen Umstellungen mehr, wenn's mal unübersichtlich wird.

Bei kleinen Anwendungen nicht notwendig, aber bei größeren (vor allem wenn mehrere Nutzer das Programm verwenden) schon:
:arrow: Freunde dich mit "Option Explicit" an, und
:arrow: erstelle eine zentrale Fehler-Routine (die ggf. die Zahl und Art der Fehler mitprotokolliert)
Du ersparst Dir damit einen Haufen Recherchearbeit was wann wo passiert ist, denn User neigen allzusehr Fehler wegzuklicken ;)

Bei SEHR vielen Makros in einem Modul wird der Basic-Editor in LO ab Version 4.x unbedienbar, da das Laden eines Moduls zur Darstellung dann u.U. Minuten dauert (http://www.libreoffice-forum.de/viewtop ... 159#p22100) daher: Plane in einer Datenbank z.B. pro Formular ein Modul. Ich hab's getestet eine Makro-Bibliothek mit 100 Modulen und 400 Makros läd in LO 4.x in 2 Sekunden, eine mit einem Modul und 200 Makros hingegen ... :x

... aber ich glaub' das wolltest Du gar nicht so genau wissen :)
g
2008 LucidL./MaverickM./WinXP LibreOffice 3.3.2 > 02/13 LinuxMint13/Xubuntu > 09/13 Debian Wheezy+LO3.5.4.2 > 01/15 Debian Jessie KDE+LO4.3.3.2/Mint17 openbox auf USB+LO4.2.8.2 > 03/16 ArchLin & LO5.1+ff > 02/18 Kubuntu

Benutzeravatar
karolus
* LO-Experte *
Beiträge: 2539
Registriert: Fr 10. Dez 2010, 10:01

Re: Programmplanung bzw. -Übersicht

Beitrag von karolus » Mi 27. Nov 2013, 00:04

Hallo

Spätestens bei der 50sten Sub|Function solltest du dir ernstlich Gedanken darüber machen auf eine richtige Programmiersprache umzusteigen, statt mit einem Relikt aus der Computersteinzeit rumzubasteln.

Karolus
LO7.4.7.5 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO24.8.0.3 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)

gogo
* LO-Experte *
Beiträge: 1081
Registriert: Sa 5. Feb 2011, 19:07

Re: Programmplanung bzw. -Übersicht

Beitrag von gogo » Mi 27. Nov 2013, 11:53

karolus hat geschrieben:...Spätestens bei der 50sten Sub|Function solltest du dir ernstlich Gedanken darüber machen auf eine richtige Programmiersprache umzusteigen, statt mit einem Relikt aus der Computersteinzeit rumzubasteln...
jep - wollte ich auch sagen, war mir aber zu sehr offtopic, und - man sollte es nicht glauben, trotz cooler Sprachen wie Python, Java, PHP und Co.: Unter StarBasic und VBA laufen bei uns ein ganzer Haufen Dinge die User "programmiert" haben äußerst stabil, flott und billig. Außerdem: Basic ist benutzerfreundlich - sozusagen "WYSIWYG". Fast alles was wir in unserem ~15 Personen Betrieb EDV-mäßig brauchen wird erstmal in Basic gecodet und getestet, ob wir's überhaupt in der Form brauchen - das hat den Vorteil, dass die Nutzer die IT viel besser verstehen und daher läuft auch die Kommunikation zwischen Software-Firma (die dann 'Pro-Software' verwirklicht) und uns sehr komplikationslos ab (denn die erkennen am BASIC-Code viel besser was erwünscht ist als wenn man es ihnen sonstwie erklärt). Auf alle Fälle viel besser und WESENTLICH billiger als bei unserer Firmenmutter (und dabei benutzen wir viel mehr EDV)...

und: Mit StarBasic+xray hab' ich noch nie Probleme gehabt (außer, dass cdbl verbuggt ist). Einziges wirkliches Manko sind die Datenbanktreiber - die funktionieren zwar, aber jeder den ich bisher getestet hab hatte Macken...
g
2008 LucidL./MaverickM./WinXP LibreOffice 3.3.2 > 02/13 LinuxMint13/Xubuntu > 09/13 Debian Wheezy+LO3.5.4.2 > 01/15 Debian Jessie KDE+LO4.3.3.2/Mint17 openbox auf USB+LO4.2.8.2 > 03/16 ArchLin & LO5.1+ff > 02/18 Kubuntu

step
Beiträge: 30
Registriert: Sa 12. Jan 2013, 20:50

Re: Programmplanung bzw. -Übersicht

Beitrag von step » Mi 27. Nov 2013, 17:57

@Koto,
Koto hat geschrieben:Hallo,
du kannst zusammenhängende Programmteile in Methoden unterbringen. Es gibt zwei Möglichkeiten:

Auf diese Weise kann man das Makro gliedern und kommentieren. Wiederholte Aufgaben werden einfacher gelöst. Methoden lassen sich sammeln und wieder verwenden. Das wäre etwas übersichtlicher.

Zudem kann man mit Modulen und Bibliotheken Ordnung ins Geschehen bringen, wenn das Makro umfangreicher wird.
das habe ich weitestgehend auch schon berücksichtigt. Allerdings habe ich eine Prozedurenstruktur aufgebaut, die zwar funktioniert, aber durch
häufige Makroaufrufe etwas unübersichtlich wird. Ein Makro ruft ein zweites auf, das wiederum ein Drittes. An einer anderen Stelle habe ich 4 identische Aufrufe hintereinander, die könnte man zusammenfassen.

@ karolus,gogo,

Es ist mein erstes Makro. Und ausser ein paar Kenntnissen aus grauer Vorzeit ist da noch nicht viel. Ich möchte jetzt an diesem funktionierenden
Beispiel ein bißchen Grundwissen aufbauen und konditionieren. Und dann natürlich weitere Makros schreiben für bestimmte Zwecke (allgemein gesprochen: Ergebnisse von Berechnungen graphisch darstellen). Und dazu sollten die Makro nicht allzu groß werden.

Zur Geschwindigkeit von LibroOffice habe ich woanders schon mal einen Kommentar abgegeben (Ich denke immer noch an ein Downdate nach). Aber bis es soweit ist, versuche ich, die Dateien möglichst klein zu halten.

Besten Dank für die Hinweise,

Gruß step
Windows 7 - LibreOffice 3.5.7
Debian 7.8.0 KDE - LibreOffice 3.5.5

step
Beiträge: 30
Registriert: Sa 12. Jan 2013, 20:50

Re: Programmplanung bzw. -Übersicht

Beitrag von step » Mi 27. Nov 2013, 18:13

Hier mal ein paar reale Fragen:

Was die Gültigkeit von Variablen angeht:

Die Beispiele in Handbüchern und Beispielen funktionieren bei mir nicht immer. Teils liegt es daran, dass eine Voraussetzung nicht mitangegeben ist, teils daran, das das Beispiel schlicht falsch ist, oder es funktioniert bei meiner Installation eben nicht.

Mich würde mal interessieren, wie man Werte, Zwischenergebnisse etc. überhaupt speichern kann. Derzeit nutze ich die Möglichkeit der Kontrollelemente im Formular auf der Zeichnungsseite (Ein Teil davon wird sowieso vom Benutzer verändert). Dort befindet sich immer ein Satz gültiger Werte. In den einzelnen Unterroutinen werden dann immer alle Werte dort ausgelesen, in (modul-globalen) Variablen gespeichert und weiterverarbeitet. Werte, die ich dort nicht speichern möchte, muß ich dann immer, wenn nötig, berechnen.

Von Vorteil ist es, dann ich keine weiteren Dateien brauche.

Andererseits wäre die Anbindung einer Textdatei, Tabelle oder Base-Datenbank denkbar. Das möchte ich zur Zeit aber noch nicht angehen.

Bisher habe ich eine Variablenliste erstellt, und eine Zusammenfassung, die die einzelnen Programmschleifen grob beschreibt.

Ich bin für weitere Tips und Hinweise stets offen,

Gruß step
Windows 7 - LibreOffice 3.5.7
Debian 7.8.0 KDE - LibreOffice 3.5.5

Koto
Beiträge: 19
Registriert: Do 30. Aug 2012, 17:05

Re: Programmplanung bzw. -Übersicht

Beitrag von Koto » Do 28. Nov 2013, 18:13

Hallo,
Allerdings habe ich eine Prozedurenstruktur aufgebaut, die zwar funktioniert, aber durch
häufige Makroaufrufe etwas unübersichtlich wird. Ein Makro ruft ein zweites auf, das wiederum ein Drittes. An einer anderen Stelle habe ich 4 identische Aufrufe hintereinander, die könnte man zusammenfassen.
Das ist schon ein wenig undurchsichtig. Was ist eine "Prozedurenstruktur"?
Zunächst mal schaffe ich Ordnung durch Einnrückung:

Code: Alles auswählen

IF Bedingung THEN
         Anweisung1
         Anweisung2
ELSE
        NochWas()
END IF

Das ein Makro ein weiteres aufruft usf., ist nichts ungewöhnliches. Jedes Makro sollte nur eine
bestimmte Aufgabe erfüllen: Z.B. Datei öffnen oder in Absätzen unnötige Leerzeichen löschen.
Bei gleichen oden ähnlichen Aufrufen ist vielleicht eine Schleife möglich:

Code: Alles auswählen

FOR i = 0 TO 3
      doThis (P(i), Q)
NEXT

Bedingung = TRUE
WHILE Bedingung
      Bedingung = isIt (Wert1, Wert2)
WEND
Die Frage ist also:w ie weit am Anfang stehst du? Ein Rat vielleicht:
kodiere den Code nicht "so runter". Das Chaos hinterher in einen Kosmos zu verwandeln, ist dem Menschen nicht gegeben. Das heißt: Es geht und gut ist oder neumachen.

Im übrigen finde ich starbasic als Hobbyprogrammierer einfach toll. Es ist -von UNO mal abgesehen- einfach und mächtig. Wenn man Python kann -besser! Aber wer lernt eine Programmiersprache in 7 Tagen? Und sieht dabei etwas sinnvolles außer helloWorld()?! Die Frage scheint mir etwas akademisch zu sein.

Benutzeravatar
karolus
* LO-Experte *
Beiträge: 2539
Registriert: Fr 10. Dez 2010, 10:01

Re: Programmplanung bzw. -Übersicht

Beitrag von karolus » Do 28. Nov 2013, 19:31

Hallo
Wenn man Python kann -besser! Aber wer lernt eine Programmiersprache in 7 Tagen? Und sieht dabei etwas sinnvolles außer helloWorld()?! Die Frage scheint mir etwas akademisch zu sein.
Gegenfrage:
Hast du StarBasic in 7 Tagen gelernt?

Python ist im Vergleich zu Basic nur Unwesentlich schwieriger zu lernen, bietet aber ein weitaus grösseres Spektrum an Möglichkeiten.

Karolus
LO7.4.7.5 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO24.8.0.3 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)

Koto
Beiträge: 19
Registriert: Do 30. Aug 2012, 17:05

Re: Programmplanung bzw. -Übersicht

Beitrag von Koto » Fr 29. Nov 2013, 14:35

Hallo Karolus,
die Diskusion gehört nur z.T. hier hinein. Ich kann kein Python, da will ich mir gar kein Urteil erlauben. Ich beziehe mich auf das hier gemeinte Makro und das Problem der Übersichtlichkeit.
Mit Starbasic läst sich durchaus in ooo DAS Ergebnis erzeugen, das ich sehen will. Da läst sich in 7 Tagen schon was machen. Die Basichilfe ist gleich erreichbar usf. Das ist "für den Hausgebrauch" schon gut. Ich kenne auch die Pythonschnittstelle nicht. Bis ich also so ein kleines unübersichtlich Makro in Python, Java oder -mir wäre lieber es lieber- in C geschrieben habe, würde das sicherlich wesentlich länger dauern.
Vielleicht werden wir uns so einig. Hat man den Anfang mal mit Basic gemacht und das Programmieren mach Freude, ist zu Python zu raten. Denn das kann mehr (und besser) als Basic und mehr als nur ooo. Das denke ich, ohne Python zu kennen.

Nächstes Kapitel zum Thema heißt Kommentierung:
Ich empfehle für jede Methode einen Kommentarkopf zu schreiben. Beispiele ausdenken ist nicht leicht; ich hoffe es wird deutlich, was ich meine:

Code: Alles auswählen

'* Diese Funktion tut DIES und JENES
'*
'* Parameter: 
'* P1 Ein String der irgenwie verändert wird
'* Rückgabe:
'* Bei DIES ein STRING, bei JENES ein INTEGER
FUNCTION diesUndJenes (P1 AS STRING) AS VARIANT
   ...
END FUNCTION
Methodennamen kann man so wählen, das sie schon beim Aufruf sich selbst erklären. Der Kopf der Methode hilft dann, die Schnittstelle besser zu verstehen und sich über die Rückgabe im klaren zu sein.

Kommentieren würde ich am Anfang auch jede Verzweigung und jede Schleife. Das ist zwar viel Tipparbeit, hilft aber enorm beim Wachstum oder Ändern des Makros.

Ein hab' ich noch: GOTO würde ich vermeiden, brauchbar vielleicht bem ERRORLEVEL.
Mich würde mal interessieren, wie man Werte, Zwischenergebnisse etc. überhaupt speichern kann. Derzeit nutze ich die Möglichkeit der Kontrollelemente im Formular auf der Zeichnungsseite (Ein Teil davon wird sowieso vom Benutzer verändert). Dort befindet sich immer ein Satz gültiger Werte. In den einzelnen Unterroutinen werden dann immer alle Werte dort ausgelesen, in (modul-globalen) Variablen gespeichert und weiterverarbeitet. Werte, die ich dort nicht speichern möchte, muß ich dann immer, wenn nötig, berechnen.
Werte global Vorzuhalten ist eine Möglichkeit. Auf der Seite von
http://www.dannenhoefer.de/faqstarbasic ... nhfer.html
findest du Makros eine Ini-Datei zu schreiben, lesen usw. die Werte unter Tags speichert.


An alle, die das LibreOffice-Forum gern nutzen und unterstützen wollen:


Bitte helfen Sie uns mit 7 Euro pro Monat.
Durch Ihren Beitrag tragen Sie dazu bei, unsere laufenden Kosten für die kommenden Monate zu decken.
Unkompliziert per Kreditkarte oder PayPal.
Als ein kleines Dankeschön werden Sie im LO-Forum als SUPPORTER gekennzeichnet.



Antworten