global const array [gibt's nicht!]

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

Moderator: Moderatoren

steffn
***
Beiträge: 92
Registriert: So, 16.11.2008 15:02

global const array [gibt's nicht!]

Beitrag von steffn »

ich möchte die inhalte für ein datenfeld unter option explicit festlegen um die werte außerhalb meiner subs und ganz oben in meinem modul bei den einfachen konstanten variablen zu haben

- funktioniert das?
- schreibweise?

wie ich es auch schreibe, ich bekomme immer eine fehlermeldung
mein letzter versuch war:

Code: Alles auswählen

 option explicit
dim array(1 to 8) as integer
array(1) = 10
...
Bild
dabei markiert er netterweise "integer"
Zuletzt geändert von steffn am Sa, 22.11.2008 16:34, insgesamt 1-mal geändert.
oo4.1.2 in winxp pro mit sp3
hawe
****
Beiträge: 151
Registriert: Di, 05.08.2008 19:47

Re: global const array

Beitrag von hawe »

Im Deklarationsteil eines Moduls gibt es keine Wertzuweisungen ausser bei Konstanten
Const
Gruss HW
Win7/SuSe 11.2 - LO 3.3
steffn
***
Beiträge: 92
Registriert: So, 16.11.2008 15:02

Re: global const array

Beitrag von steffn »

ja und ich möchte gerne ein datenfeld voll von konstanten
daher meine fragen:
- funktioniert so etwas?
- und wie ist die schreibweise?
oo4.1.2 in winxp pro mit sp3
hawe
****
Beiträge: 151
Registriert: Di, 05.08.2008 19:47

Re: global const array

Beitrag von hawe »

Nein, es gibt keine Const Arrays...
steffn
***
Beiträge: 92
Registriert: So, 16.11.2008 15:02

Re: global const array [gibt's nicht!]

Beitrag von steffn »

Damit hat meine Suche ein Ende - danke.

...

Ich hätte allerdings immer noch gerne Datenfelder voller Konstanten. :mrgreen:
Daher benutze ich jetzt globale Datenfelder und fülle diese einmal.
Problem ist, dass diese später überraschenderweise leer sind und somit Fehler hervorrufen, obwohl die Datei durchgängig geöffnet ist und ich den Inhalt ganz sicher nur an einer Stelle im Code ändere.
Welche Ereignisse können so etwas auslösen :?:
oo4.1.2 in winxp pro mit sp3
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: global const array [gibt's nicht!]

Beitrag von komma4 »

steffn hat geschrieben:Problem ist, dass diese später überraschenderweise leer sind
F1 Online Hilfe Basic: Global-Anweisung [Laufzeit] hat geschrieben:Dimensioniert eine Variable oder ein Array auf globaler Ebene (also nicht innerhalb eine Subroutine oder Funktion), sodass die Variable bzw. das Array in allen Bibliotheken und Modulen für die Dauer der aktuellen Sitzung gültig ist.
Du definierst sie ausserhalb - und rufst die SUB, vor der sie stehen auf, vor der Anweisung auf, die sie ändern? Sie stehen im gleichen Modul der selben Bibliothek?
Beispiel:

Code: Alles auswählen

Global meineVar as String
Sub Main1
meineVar = "erster Inhalt"
print meineVar
' irgendwas
' ...
' Aufruf der SUB zum Ändern
Main2
'...
print meineVar
' weiter im Text
'...

print meineVar ' hier leer?
End Sub

Sub Main2
meineVar = "neuer Inhalt"
End Sub
Verwendest Du Option Explicit?
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
steffn
***
Beiträge: 92
Registriert: So, 16.11.2008 15:02

Re: global const array [gibt's nicht!]

Beitrag von steffn »

Verstehe ich nicht.^^ Ja.
Ja.

In meinem Fall würde ich das anhand von Code mit deinen Begriffen so beschreiben:

Code: Alles auswählen

Option Explicit
Global meinArr() as String
Sub Main1
meinArr() = "Inhalt" ' einmaliges Füllen
End Sub
' ...
' andere Subs, eventuelle Fehlermeldungen, eventuelle Code Änderungen
'...
Sub Main2
print meinArr() ' hier mal gefüllt, mal leer, noch kein System erkannt
End Sub
oo4.1.2 in winxp pro mit sp3
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: global const array [gibt's nicht!]

Beitrag von komma4 »

Hallo steffn,

Du verwendest ein ARRAY - und das benötigt eine Positionsangabe...
F1 Online Hilfe,Basic, ARRAY-Funktion [Laufzeit] hat geschrieben:Dim A As Variant
A = Array("Fred","Tom","Bill")
Msgbox A(2)
Dein Beispiel kann nicht laufen.

Code: Alles auswählen

Option Explicit
' definiert ein nicht-deminsioniertes Array
Global meinArr() as String
Sub Main1

meinArr() = "Inhalt" ' einmaliges Füllen
' ergibt Fehler: Objektvariable nicht belegt
End Sub
' ...
' andere Subs, eventuelle Fehlermeldungen, eventuelle Code Änderungen
'...
Sub Main2
print meinArr() ' hier mal gefüllt, mal leer, noch kein System erkannt
End Sub
Richtig wäre: 1. definiere, 2. dimensioniere und setze:

Code: Alles auswählen

Global asMeineStrings(3) as String
' ergibt: 4 strings
Sub testStringArray
asMeineStrings(3) = "Inhalt"
End Sub

Werde Licht?



Tipp: ich verwende eine (eigene!) Ungarische_Notation
  • a = array
    s = string
    i = integer
    l = long
    v = variant
    o = object
Damit ist im Code immer klar, um was es sich handelt. Dient der Übersichtlichkeit bei grösseren Codestücken.
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
steffn
***
Beiträge: 92
Registriert: So, 16.11.2008 15:02

Re: global const array [gibt's nicht!]

Beitrag von steffn »

Tag Winfried,

nein, irgendwie ... absolut nicht.
Ich habe das Gefühl, dass Du meine Beiträge zu schnell liest und dabei leider nicht verstehst, welche Informationen ich eigentlich gerne hätte.
Es kann genauso gut an meiner Formulierung liegen ... aber ein bisschen subjektiv darf ich hoffentlich sein.

komma4 hat geschrieben:...
Du verwendest ein ARRAY - und das benötigt eine Positionsangabe...
...
Dein Beispiel kann nicht laufen.
...
Ich habe aber doch nicht meinen Code hier rein kopiert sondern lediglich, im Irrglauben, dass dies zur Klärung hilft, Dein Beispiel so geändert, dass die Zeilen mit Datenfeld in einer Folge stehen, die der in meinem Code sehr ähnelt. Und da Du keine verwendet hast, ...
Glaub mir, soweit ich das überblicken kann, funktionieren meine Prozeduren bestens, es entstehen nur Fehler, wenn das oder die Datenfelder manchmal "auf einmal" wieder leer sind.
Ich möchte auch gar keinen Code als Antwort sondern "nur" die Frage, wie oben beschrieben, beantwortet bekommen:
Welche Ereignisse können das Löschen von befüllten globalen Datenfeldern auslösen?
Ich denke nun mal, dass diese solange erhalten bleiben müssten, wie die Datei geöffnet ist.
FALSE ?
oo4.1.2 in winxp pro mit sp3
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: global const array [gibt's nicht!]

Beitrag von komma4 »

Ich habe das Gefühl, dass Du meine Beiträge nicht richtig liesst.

Aus der Hilfe habe ich zitiert: die Dauer der Gültigkeit der GLOBAL-Varibalen ist sitzungslang. Bedeutet: auch wenn die Datei, welcher den Code enthält, geschlossen wird, sind diese noch vorhanden.
Deren Inhalt änderst Du alleine durch neues Setzen.

P.S.: von mir geposteter Code ist [bei mir: meiner OOo-Betriebssystem-Kombination] lauffähig. Wenn ich etwas "aus dem Kopf" entwerfe, schreibe ich das dazu.
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
steffn
***
Beiträge: 92
Registriert: So, 16.11.2008 15:02

Re: global const array [gibt's nicht!]

Beitrag von steffn »

Dass eine Sitzung sich auf das Laufen des Betriebsystems bezieht, wusste ich nicht, ich dachte dabei ginge es um das Offenhalten der Datei in der sich der Code befindet.
Dass Deine Codebeispiele lauffähig sind und meins nicht, ist mir nicht aufgefallen. :?

Aber wieso meine Datenfelder manchmal so leer wie "" sind, weiß ich leider immer noch nicht. :(
Ich denke immer noch, dass das mit Debuggen, Fehlermeldungen, Codeänderungen zu tun hat.
oo4.1.2 in winxp pro mit sp3
Antworten