[gelöst][Array] gleich mit String-Elementen vorbelegen
Moderator: Moderatoren
[gelöst][Array] gleich mit String-Elementen vorbelegen
Hallo,
in der einschlägigen Literatur und im Net werden Arrays am Beispeil von Integerwerten erklärt, welche nachträglich zugewiesen werden.
Geht das auch wie in anderen Sprachen, z.B. in dieser Form:
myArray ("Hund", "Katze", "Maus") as String
oder mit Zahlenreihen
myArray (0815, 4711) as Integer
... um dann über eine Schleife diese Werte einzulesen oder direkt anzusprechen mit oText.text = myArray(3)
in der einschlägigen Literatur und im Net werden Arrays am Beispeil von Integerwerten erklärt, welche nachträglich zugewiesen werden.
Geht das auch wie in anderen Sprachen, z.B. in dieser Form:
myArray ("Hund", "Katze", "Maus") as String
oder mit Zahlenreihen
myArray (0815, 4711) as Integer
... um dann über eine Schleife diese Werte einzulesen oder direkt anzusprechen mit oText.text = myArray(3)
Zuletzt geändert von opiWahn am Do, 07.04.2011 15:19, insgesamt 1-mal geändert.
Grüße
opiWahn
opiWahn
- komma4
- ********
- Beiträge: 5332
- Registriert: Mi, 03.05.2006 23:29
- Wohnort: Chon Buri Thailand Asia
- Kontaktdaten:
Re: [Array] gleich mit Elementen vorbelegen - Typ String
Das geht -aber nicht bei der Deklaration!
HIlft Dir das?
Code: Alles auswählen
Dim mArray(2) as String
mArray() = Array( "Hund", "Katze", "Maus" )
HIlft Dir das?
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)
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)
Re: [Array] gleich mit Elementen vorbelegen - Typ String
Danke schon mal für die Erleuchtung
Muß dieser Sammelbegriff nicht auch deklariert werden?

ich gehe mal davon aus, daß anstelle von "Array" auch ein anderer "Sammelbegriff" stehen könnte, der mArray innerhalb der Sub zugeordnet wird.komma4 hat geschrieben:Code: Alles auswählen
mArray() = Array( "Hund", "Katze", "Maus" )
Muß dieser Sammelbegriff nicht auch deklariert werden?
Grüße
opiWahn
opiWahn
Re: [Array] gleich mit Elementen vorbelegen - Typ String
Hallo
Eigne dir mal ein paar Grundlagen an viewtopic.php?f=18&t=1553#p5832
Gruß Karo
Falsch, 'array()' ist eine runtime-function die die Zeichenfolge: "Hund", "Katze", "Maus" in ein Array-objekt mit den Elementen "Hund" , "Katze" und "Maus" überführt.Ich gehe mal davon aus, daß anstelle von "Array" auch ein anderer "Sammelbegriff" stehen könnte, der mArray innerhalb der Sub zugeordnet wird.
Eigne dir mal ein paar Grundlagen an viewtopic.php?f=18&t=1553#p5832
Gruß 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)
Re: [Array] gleich mit Elementen vorbelegen - Typ String
Hallo Karolus,
daß ich noch einiges, vorallem an Grundlagen, lernen muß weiss ich und mach ich auch. Hierzu hab' ich mir vor etwa 2 Wochen auch einen Wälzer für Schlappe 50,- Euronen zugelegt. Das Kapitel zu Thema Arrays umfasst jedoch nur 3 Seiten und geht auf die direkte Zuweisung nicht ein, zumindest nicht was Strings betrifft.
Soweit ich das verstanden habe sollte folgender Code auch funktionieren:
bis jetzt, und das möchte ich ändern/verkürzen, sieht das so aus:
daß ich noch einiges, vorallem an Grundlagen, lernen muß weiss ich und mach ich auch. Hierzu hab' ich mir vor etwa 2 Wochen auch einen Wälzer für Schlappe 50,- Euronen zugelegt. Das Kapitel zu Thema Arrays umfasst jedoch nur 3 Seiten und geht auf die direkte Zuweisung nicht ein, zumindest nicht was Strings betrifft.
Soweit ich das verstanden habe sollte folgender Code auch funktionieren:
Code: Alles auswählen
' Database
Dim Context As Object, DB As Object, Connection As Object, QueryErg As Object
Dim DBName As String, SQL As String
Dim Statement As Variant
' FormObjects
Dim oForm As Object
Dim oText(11) as String
Sub Value_ANr
oANr = inputBox ("Auftragsnummer","Eingabe erforderlich","Bitte Auftragsnummer eingeben")
oForm = thisComponent.drawpage.forms.getbyindex(0)
oText() = Array ("o_anrede", "o_name", "o_titel", "o_strasse", "o_ort", "r_anrede", "r_name", "r_titel", "r_strasse", "r_ort", "langtext")
For i = 1 to 11
oText(i) = oForm.getByName(i)
next i
oEdit = oForm.getByName("chk_edit")
DBName = "REPARATUR"
Context = createUnoService("com.sun.star.sdb.DatabaseContext")
DB = Context.GetByName (DBName)
Connection = DB.GetConnection ("","")
Sql = "SELECT `objekt_anrede`,`objekt_name`,`objekt_titel`,`objekt_strasse`,`objekt_ort`,`rechnung_anrede`,`rechnung_name`,`rechnung_titel`,`rechnung_strasse`,`rechnung_ort`,`langtext` FROM `REPARATUR` WHERE `key` = '"+oANr+"';"
Statement = Connection.CreateStatement
QueryErg = Statement.ExecuteQuery(SQL)
for i = 1 to 11
oText(i).text = trim(QueryErg.GetString(i))
if i = 11 then
TempText = trim(QueryErg.GetString(i))
oText(i).text = Replace(TempText, Chr(10)+ Chr(13), "")
end if
next i
Connection.Close()
if oEdit.state(1) then
for i = 1 to 10
oText(i).ReadOnly = false
next i
end if
End Sub
Code: Alles auswählen
' Database
Dim Context As Object, DB As Object, Connection As Object, QueryErg As Object
Dim DBName As String, SQL As String
Dim Statement As Variant
' FormObjects
Dim oForm As Object
Dim oText(11)
Sub Value_ANr
oANr = inputBox ("Auftragsnummer","Eingabe erforderlich","Bitte Auftragsnummer eingeben")
oForm = thisComponent.drawpage.forms.getbyindex(0)
oText(1) = oForm.getByName("o_anrede")
oText(2) = oForm.getByName("o_name")
oText(3) = oForm.getByName("o_titel")
oText(4) = oForm.getByName("o_strasse")
oText(5) = oForm.getByName("o_ort")
oText(6) = oForm.getByName("r_anrede")
oText(7) = oForm.getByName("r_name")
oText(8) = oForm.getByName("r_titel")
oText(9) = oForm.getByName("r_strasse")
oText(10) = oForm.getByName("r_ort")
oText(11) = oForm.getByName("langtext")
oEdit = oForm.getByName("chk_edit")
DBName = "REPARATUR"
Context = createUnoService("com.sun.star.sdb.DatabaseContext")
DB = Context.GetByName (DBName)
Connection = DB.GetConnection ("","")
Sql = "SELECT `objekt_anrede`,`objekt_name`,`objekt_titel`,`objekt_strasse`,`objekt_ort`,`rechnung_anrede`,`rechnung_name`,`rechnung_titel`,`rechnung_strasse`,`rechnung_ort`,`langtext` FROM `REPARATUR` WHERE `key` = '"+oANr+"';"
Statement = Connection.CreateStatement
QueryErg = Statement.ExecuteQuery(SQL)
for i = 1 to 11
oText(i).text = trim(QueryErg.GetString(i))
if i = 11 then
TempText = trim(QueryErg.GetString(i))
oText(i).text = Replace(TempText, Chr(10)+ Chr(13), "")
end if
next i
Connection.Close()
if oEdit.state(1) then
for i = 1 to 10
oText(i).ReadOnly = false <-- geht nicht (?)
next i
end if
End Sub
Grüße
opiWahn
opiWahn
Re: [Array] gleich mit Elementen vorbelegen - Typ String
Aloha
Arrays sind nullbasiert, sofern nichts anderes angegeben wird, das erste Element ist also bei Index 0, nicht bei Index 1
Abgesehen davon sollte der Code funktionieren.
Wobei mir nicht klar ist, was das "(1)" bei
zu suchen hat, bzw. welchen Zweck es erfüllen soll.
In dieser Form nicht.opiWahn hat geschrieben:Soweit ich das verstanden habe sollte folgender Code auch funktionieren:
Arrays sind nullbasiert, sofern nichts anderes angegeben wird, das erste Element ist also bei Index 0, nicht bei Index 1
Code: Alles auswählen
For i = 0 to 10
oText(i) = oForm.getByName(i)
next i
Wobei mir nicht klar ist, was das "(1)" bei
Code: Alles auswählen
if oEdit.state(1) then
Re: [Array] gleich mit Elementen vorbelegen - Typ String
Hi DPunch,
klar fangen die Elemnete im Array bei 0 an. Hab so noch drin, weil es ursprünglich ein Element 0 gab, welches ich aber rausgeworfen habe weils unrelevant geworden ist.
Bei "if oEdit.state(1) then ..." will ich eigendlich nur abfragen ob der Status der Checkbox (Edit) 1 also an ist, um dann den ReadOnly-Status der Textfelder 0-10 auf false zu setzen.
klar fangen die Elemnete im Array bei 0 an. Hab so noch drin, weil es ursprünglich ein Element 0 gab, welches ich aber rausgeworfen habe weils unrelevant geworden ist.
Bei "if oEdit.state(1) then ..." will ich eigendlich nur abfragen ob der Status der Checkbox (Edit) 1 also an ist, um dann den ReadOnly-Status der Textfelder 0-10 auf false zu setzen.
Grüße
opiWahn
opiWahn
Re: [Array] gleich mit Elementen vorbelegen - Typ String
Habs jetzt mal versucht, allerdings wird an der 2. Schleife gemeckert, daß "oText" bereits anders definiert ist!
Abhilfe?
Abhilfe?
Code: Alles auswählen
' Database
Dim Context As Object, DB As Object, Connection As Object, QueryErg As Object
Dim DBName As String, SQL As String
Dim Statement As Variant
' FormObjects
Dim oForm As Object
Dim oText(10) as String
Dim aOpt1(), aOpt2(), aOpt3(), aOpt4()
Dim s1_1 As String, s1_2 As String, s2_1 As String, s2_2 As String, s3_1 As String, s3_2 As String, s4_1 As String, s4_2 As String
' ErrorProof
Dim grpfail1 As Variant, grpfail2 As Variant, grpfail3 As Variant, grpfail4 As Variant
Dim errormsg1 as String
' save odt/PDF
Dim datname As String, path As String, extension As String, odturl As String, pdfurl As String
' addForm
dim document as object
dim dispatcher as object
'--------------------------------------------------------------------------------------------- Baustelle!
'Sub clearForm
'end Sub
'--------------------------------------------------------------------------------------------- Teilbaustelle!
Sub Value_ANr
'clearForm
oANr = inputBox ("Auftragsnummer","Eingabe erforderlich","Bitte Auftragsnummer eingeben")
oForm = thisComponent.drawpage.forms.getbyindex(0)
oText() = Array ("o_anrede", "o_name", "o_titel", "o_strasse", "o_ort", "r_anrede", "r_name", "r_titel", "r_strasse", "r_ort", "langtext")
' |--- sollte mit o.g. Array ersetzt werden -----------|
'oText(1) = oForm.getByName("o_anrede")
'oText(2) = oForm.getByName("o_name")
'oText(3) = oForm.getByName("o_titel")
'oText(4) = oForm.getByName("o_strasse")
'oText(5) = oForm.getByName("o_ort")
'oText(6) = oForm.getByName("r_anrede")
'oText(7) = oForm.getByName("r_name")
'oText(8) = oForm.getByName("r_titel")
'oText(9) = oForm.getByName("r_strasse")
'oText(10) = oForm.getByName("r_ort")
'oText(11) = oForm.getByName("langtext")
'|----------------------------------------------------------|
for i = 0 to 10
oText(i) = oForm.getByName(i)
next i
oEdit = oForm.getByName("chk_edit")
DBName = "REPARATUR"
Context = createUnoService("com.sun.star.sdb.DatabaseContext")
DB = Context.GetByName (DBName)
Connection = DB.GetConnection ("","")
Sql = "SELECT `objekt_anrede`,`objekt_name`,`objekt_titel`,`objekt_strasse`,`objekt_ort`,`rechnung_anrede`,`rechnung_name`,`rechnung_titel`,`rechnung_strasse`,`rechnung_ort`,`langtext` FROM `REPARATUR` WHERE `key` = '"+oANr+"';"
Statement = Connection.CreateStatement
QueryErg = Statement.ExecuteQuery(SQL)
for i = 0 to 10
oText(i).text = trim(QueryErg.GetString(i))
if i = 10 then
TempText = trim(QueryErg.GetString(i))
oText(i).text = Replace(TempText, Chr(10)+ Chr(13), "")
end if
next i
Connection.Close()
' wenn Checkbox "an", dann Textfelder 0-9 ReadOnly = false
if oEdit.state(1) then
for i = 0 to 9
oText(i).ReadOnly = false
next i
end if
End Sub
Grüße
opiWahn
opiWahn
- komma4
- ********
- Beiträge: 5332
- Registriert: Mi, 03.05.2006 23:29
- Wohnort: Chon Buri Thailand Asia
- Kontaktdaten:
Re: [Array] gleich mit Elementen vorbelegen - Typ String
Abhilfe?
Die korrekte Syntax benutzen!
In einem Text-Array oText() gibt es keine Eigenschaft .text
Die korrekte Syntax benutzen!
In einem Text-Array oText() gibt es keine Eigenschaft .text
Code: Alles auswählen
oText(i) = trim(QueryErg.GetString(i))
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)
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)
Re: [Array] gleich mit Elementen vorbelegen - Typ String
und wie soll ich ohne .text dann den Text (Inhalt) aus der Query zuweisen?
In der Form geht's, außer daß er mir trim und replace nicht mehr macht.
Und auf die Schleife bei oEdit.state hat er schon gar keine Lust.
In der Form geht's, außer daß er mir trim und replace nicht mehr macht.
Und auf die Schleife bei oEdit.state hat er schon gar keine Lust.
Code: Alles auswählen
Sub Value_ANr
'clearForm
oANr = inputBox ("Auftragsnummer","Eingabe erforderlich","Bitte Auftragsnummer eingeben")
oForm = thisComponent.drawpage.forms.getbyindex(0)
'oText() = Array ("o_anrede", "o_name", "o_titel", "o_strasse", "o_ort", "r_anrede", "r_name", "r_titel", "r_strasse", "r_ort", "langtext")
' nachfolgender Bereich soll durch Array oben ersetzt werden
oText(1) = oForm.getByName("o_anrede")
oText(2) = oForm.getByName("o_name")
oText(3) = oForm.getByName("o_titel")
oText(4) = oForm.getByName("o_strasse")
oText(5) = oForm.getByName("o_ort")
oText(6) = oForm.getByName("r_anrede")
oText(7) = oForm.getByName("r_name")
oText(8) = oForm.getByName("r_titel")
oText(9) = oForm.getByName("r_strasse")
oText(10) = oForm.getByName("r_ort")
oText(11) = oForm.getByName("langtext")
' for i = 0 to 10
' oText(i) = oForm.getByName(i)
' next i
oEdit = oForm.getByName("chk_edit")
DBName = "REPARATUR"
Context = createUnoService("com.sun.star.sdb.DatabaseContext")
DB = Context.GetByName (DBName)
Connection = DB.GetConnection ("","")
Sql = "SELECT `objekt_anrede`,`objekt_name`,`objekt_titel`,`objekt_strasse`,`objekt_ort`,`rechnung_anrede`,`rechnung_name`,`rechnung_titel`,`rechnung_strasse`,`rechnung_ort`,`langtext` FROM `REPARATUR` WHERE `key` = '"+oANr+"';"
Statement = Connection.CreateStatement
QueryErg = Statement.ExecuteQuery(SQL)
for i = 1 to 11
oText(i).text = trim(QueryErg.GetString(i))
if i = 11 then
TempText = trim(QueryErg.GetString(i))
oText(i).text = Replace(TempText, Chr(10)+ Chr(13), "")
end if
next i
Connection.Close()
' Checkbox "Edit" soll in diesem Fall auf "aus" stehen und muss aktiv eingeschaltet werden, dann
' ReadOnly = false
' Hintergrund der Textfelder "grau" mit Rahmen
' wird Checkbox wieder ausgeschaltet bleiben geänderte Werte stehen
' ReadOnly = true
' Hintergrund der Textfelder "weiss" ohne Rahmen
if oEdit.state then
for i = 1 to 10
oText(i).ReadOnly = false
oText(i).BackgroundColor = RGB(211,211,211)
oText(i).Border(2)
next i
else
oText(i).ReadOnly = true
end if
End Sub
Zuletzt geändert von opiWahn am Di, 05.04.2011 12:14, insgesamt 1-mal geändert.
Grüße
opiWahn
opiWahn
- komma4
- ********
- Beiträge: 5332
- Registriert: Mi, 03.05.2006 23:29
- Wohnort: Chon Buri Thailand Asia
- Kontaktdaten:
Re: [Array] gleich mit Elementen vorbelegen - Typ String
Genauso, wie ich es bereits im letzten Codebeispiel gemacht habeopiWahn hat geschrieben:und wie soll ich ohne .text dann den Text (Inhalt) aus der Query zuweisen?

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)
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)
Re: [Array] gleich mit Elementen vorbelegen - Typ String
das habe ich gemacht, mit dem Ergebnis, daß die Textfelder leer blieben
Grüße
opiWahn
opiWahn
- komma4
- ********
- Beiträge: 5332
- Registriert: Mi, 03.05.2006 23:29
- Wohnort: Chon Buri Thailand Asia
- Kontaktdaten:
Re: [Array] gleich mit Elementen vorbelegen - Typ String
TRIM ist eine Laufzeitfunktion, welche Leerzeichen entfernt.
Wenn nach einem
Dein oText( 1 ) leer ist, dann war vorher auch nichts vorhanden.
Eine Funktion REPLACE kennt mein OOo (und Dein Codebeispiel) nicht.
Und nochmals: es gibt keine Eigenschaft .text eines Arrays von Strings!
Mir unerklärlich, warum Du an dieser Stelle keine Fehlermeldung "Funktion oder Eigenschaft nicht gefunden" bekommst
Benutze XRAY zum Untersuchen Deiner Objekte!
(das war nun mein 134. Hinweis auf dieses Tool
)
Wenn nach einem
Code: Alles auswählen
oText( 1 ) = TRIM( QueryErg.GetString( 1 ) )
Eine Funktion REPLACE kennt mein OOo (und Dein Codebeispiel) nicht.
Und nochmals: es gibt keine Eigenschaft .text eines Arrays von Strings!
Mir unerklärlich, warum Du an dieser Stelle keine Fehlermeldung "Funktion oder Eigenschaft nicht gefunden" bekommst
Benutze XRAY zum Untersuchen Deiner Objekte!
(das war nun mein 134. Hinweis auf dieses Tool

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)
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)
Re: [Array] gleich mit Elementen vorbelegen - Typ String
Hallo Winfried,
bis zu meiner wahnwitzigen Idee möglichst viel mit Arrays und Schleifen zu lösen, hat der Code ohne Fehler so funkltioniert.
Trim für die möglichen Leerzeichen ging genauso, als auch Replace für das mehrzeilige Textfeld um z.B. Umbrüche zu entfernen.
Den Tipp hatte ich von DPunch und auch in der Ooo-Doku/Wiki ist Replace mit dieser Wirkung beschrieben.
Zwar "ursprünglich" für Calc, scheint aber auch unterm Writer zu funktionieren.
"Und das ist alles was ich dazu sagen kann ..."
Die Handhabung von xray ist mir noch nicht so geläufig.
bis zu meiner wahnwitzigen Idee möglichst viel mit Arrays und Schleifen zu lösen, hat der Code ohne Fehler so funkltioniert.
Trim für die möglichen Leerzeichen ging genauso, als auch Replace für das mehrzeilige Textfeld um z.B. Umbrüche zu entfernen.
Den Tipp hatte ich von DPunch und auch in der Ooo-Doku/Wiki ist Replace mit dieser Wirkung beschrieben.
Zwar "ursprünglich" für Calc, scheint aber auch unterm Writer zu funktionieren.
"Und das ist alles was ich dazu sagen kann ..."

Die Handhabung von xray ist mir noch nicht so geläufig.
Grüße
opiWahn
opiWahn
Re: [Array] gleich mit Elementen vorbelegen - Typ String
Aloha
Dein Fehler ist die Variablendeklaration
Nimm diese entweder komplett raus oder änder sie in
dann sollte Dein Code auch laufen.
Diese falsche Deklaration habe ich übersehen, als ich das erste Mal einen kurzen Blick auf Deinen Code geworfen hatte.

Dein Fehler ist die Variablendeklaration
Code: Alles auswählen
Dim oText(10) as String
Code: Alles auswählen
Dim oText()
Diese falsche Deklaration habe ich übersehen, als ich das erste Mal einen kurzen Blick auf Deinen Code geworfen hatte.
REPLACE ist eine anscheinend undokumentierte Runtime-Funktion von OOokomma4 hat geschrieben:Eine Funktion REPLACE kennt mein OOo (und Dein Codebeispiel) nicht.
