Programmierung unter AOO/LO (StarBasic, Python, Java, ...)
Moderator: Moderatoren
saturus
**
Beiträge: 34 Registriert: Mi, 01.02.2006 07:43
Beitrag
von saturus » Do, 10.01.2013 13:51
Hallo,
ich habe das Problem, dass ich eine Textdatei mit n Namen auslesen möchte. Zu jedem Namen gibt es m Adressen. Ich hatte mir vorgestellt, dass Ergibnis in einen eigenen Objekt zu speichern.
Code: Alles auswählen
Type AdressenObject
sStrasse as string
sHausnummer as string
sPLZ as string
sOrt as string
End Type
Type KontaktObject
sVorname as string
sNachname as string
oAdressen() as AdressenObject
End Type
sub main
dim oKontakt as Object
oKontakt () = CreateObject("KontaktObject")
end sub
Soweit läuft es auch. Jetzt kann ich aber nicht vorher sagen, wie viele Kontakte es gibt und wie viele Adressen der jeweilige Kontakt hat. Gibt es eine Möglichkeit, dass Object-Array einfach durch hinzufügen zu vergrößern? Geht das auch für das Unterobjekt? Oder bin ich ganz auf dem falschen Weg?
Vielen Dank für die Unterstützung!
juetho
******
Beiträge: 617 Registriert: Di, 20.04.2010 15:46
Wohnort: Berlin
Beitrag
von juetho » Do, 10.01.2013 15:28
saturus hat geschrieben: Gibt es eine Möglichkeit, dass Object-Array einfach durch hinzufügen zu vergrößern?
Die Hilfe bietet die
ReDim -Funktion mit dem Parameter
Preserve an. Inwieweit das für das Unterobjekt möglich ist, musst du ausprobieren.
Gruß Jürgen
Situation: LibO 3.6 auf Win 7 Home Premium (64-bit) mit MySQL (localhost) über JDBC
saturus
**
Beiträge: 34 Registriert: Mi, 01.02.2006 07:43
Beitrag
von saturus » Fr, 11.01.2013 09:06
Dankeschön für die schnelle Rückmeldung. Redim Preserve klappt leider nur in erster Ebene. In der zweiten Ebene kommt leider ein Fehler.
Ich vermute mal, dass ich eher eine Verständnisproblem mit eigenen Strucs habe, denn ich würde auf dieser Basis gerne noch komplexer Konstrucktionen anlegen und dann nur von einen Subroutine zur nächste weiterreichen.
Kann mir hier jemand helfen.
- Wie lege ich genau eigene Strucs, auch mit Ebenen, an?
- Wie kann ich diese auch als Array benutzen?
- Wie kann ich Elemente
Vielen Dank schon einmal im Voraus!
F3K Total
********
Beiträge: 3724 Registriert: Mo, 28.02.2011 17:49
Beitrag
von F3K Total » Fr, 11.01.2013 18:54
Hi,
ich habe mal ein bisschen probiert, mit Xray oder Mri, bzw. dem Beobachter kann ich die Typen nicht sehen, die Msgbox geht, und das Redim Preserve wohl auch.
Code: Alles auswählen
Type AdressenObject
sStrasse as string
sHausnummer as string
sPLZ as string
sOrt as string
End Type
Type KontaktObject
sVorname as string
sNachname as string
oAdressen as AdressenObject
End Type
sub Test_Object
dim newAdresse1 as AdressenObject
newAdresse1.sStrasse = "Feldweg"
newAdresse1.sHausnummer = "12"
newAdresse1.sPLZ = "12345"
newAdresse1.sOrt = "Guckst du hier wo"
dim newAdresse2 as AdressenObject
newAdresse2.sStrasse = "Waldweg"
newAdresse2.sHausnummer = "11a"
newAdresse2.sPLZ = "9999999"
newAdresse2.sOrt = "Sonstwo"
dim oKontakt(0) as KontaktObject
oKontakt(0).sVorname = "Willy"
oKontakt(0).sNachname = "Schmidt"
oKontakt(0).oAdressen = newAdresse1
redim preserve oKontakt(1)
oKontakt(1).sVorname = "Erika"
oKontakt(1).sNachname = "Schmidt"
oKontakt(1).oAdressen = newAdresse1
redim preserve oKontakt(2)
oKontakt(2).sVorname = "Klaus"
oKontakt(2).sNachname = "Meyer"
oKontakt(2).oAdressen = newAdresse2
redim preserve oKontakt(3)
oKontakt(3).sVorname = "Gabriele"
oKontakt(3).sNachname = "Meyer"
oKontakt(3).oAdressen = newAdresse2
redim preserve oKontakt(4)
oKontakt(4).sVorname = "Fritzchen"
oKontakt(4).sNachname = "Meyer"
oKontakt(4).oAdressen = newAdresse2
currentcontact = oKontakt(3)
currentcontact1 = oKontakt(1)
currentadresse = currentcontact.oAdressen
currentadresse1 = currentcontact1.oAdressen
msgbox "1.) "+currentcontact.sVorname+" "+currentcontact.sNachname+" wohnt in "+currentadresse.sPLZ+_
" "+currentadresse.sOrt+", "+currentadresse.sStrasse+" "+currentadresse.sHausnummer+chr(13)+_
"2.) "+currentcontact1.sVorname+" "+currentcontact1.sNachname+" wohnt in "+currentadresse1.sPLZ+_
" "+currentadresse1.sOrt+", "+currentadresse1.sStrasse+" "+currentadresse1.sHausnummer
end sub
Gruß R
saturus
**
Beiträge: 34 Registriert: Mi, 01.02.2006 07:43
Beitrag
von saturus » Mo, 14.01.2013 14:12
Hallo und danke für die Hilfe,
ganz hat der Code nicht mein Problem erfasst, aber er hat mir sehr geholfen!
Code: Alles auswählen
REM ***** BASIC *****
Option Explicit
Type AdressenObject
sAdresseArt as string
sStrasse as string
sHausnummer as string
sPLZ as string
sOrt as string
End Type
Type KontaktObject
sVorname as string
sNachname as string
oAdressen as AdressenObject
End Type
sub Test_Object
dim oKontakt() as KontaktObject
dim newAdresse() as AdressenObject
redim preserve oKontakt(0)
oKontakt(0).sVorname = "Willy"
oKontakt(0).sNachname = "Schmidt"
redim preserve newAdresse(0)
newAdresse(0).sAdresseArt = "privat"
newAdresse(0).sStrasse = "Feldweg"
newAdresse(0).sHausnummer = "12"
newAdresse(0).sPLZ = "12345"
newAdresse(0).sOrt = "Musterstadt"
redim preserve newAdresse(1)
newAdresse(1).sAdresseArt = "dienstlich"
newAdresse(1).sStrasse = "Waldweg"
newAdresse(1).sHausnummer = "11a"
newAdresse(1).sPLZ = "99999"
newAdresse(1).sOrt = "Sonstwo"
oKontakt(0).oAdressen = newAdresse()
msgbox oKontakt(0).sVorname & " " & oKontakt(0).sNachname & chr(13) &_
oKontakt(0).oAdressen(0).sAdresseArt & ": " & oKontakt(0).oAdressen(0).sOrt & chr(13) &_
oKontakt(0).oAdressen(1).sAdresseArt & ": " & oKontakt(0).oAdressen(1).sOrt & chr(13)
Rem Nächster Kontakt
redim preserve oKontakt(1)
oKontakt(1).sVorname = "Max"
oKontakt(1).sNachname = "Mustermann"
Rem TempAdressenObjekt wieder auf NULL
redim newAdresse() as AdressenObject
redim preserve newAdresse(0)
newAdresse(0).sAdresseArt = "privat1"
newAdresse(0).sStrasse = "Feldweg"
newAdresse(0).sHausnummer = "12"
newAdresse(0).sPLZ = "12345"
newAdresse(0).sOrt = "Musterstadt1"
redim preserve newAdresse(1)
newAdresse(1).sAdresseArt = "privat2"
newAdresse(1).sStrasse = "Waldweg"
newAdresse(1).sHausnummer = "11a"
newAdresse(1).sPLZ = "99999"
newAdresse(1).sOrt = "Sonstwo1"
oKontakt(1).oAdressen = newAdresse()
msgbox oKontakt(1).sVorname & " " & oKontakt(1).sNachname & chr(13) &_
oKontakt(1).oAdressen(0).sAdresseArt & ": " & oKontakt(1).oAdressen(0).sOrt & chr(13) &_
oKontakt(1).oAdressen(1).sAdresseArt & ": " & oKontakt(1).oAdressen(1).sOrt & chr(13)
end sub
Dieser Befehl ging leider nicht, aber durch die Verwendung des "TempObjektes" kann man auch ein Unterobjekt (neu-)dimmensionieren.