Verständnisfrage zu eigenen Objekte mit Unter-Objekten

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

Moderator: Moderatoren

saturus
**
Beiträge: 34
Registriert: Mi, 01.02.2006 07:43

Verständnisfrage zu eigenen Objekte mit Unter-Objekten

Beitrag von saturus »

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

Re: Verständnisfrage zu eigenen Objekte mit Unter-Objekten

Beitrag von juetho »

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

Re: Verständnisfrage zu eigenen Objekte mit Unter-Objekten

Beitrag von saturus »

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

Re: Verständnisfrage zu eigenen Objekte mit Unter-Objekten

Beitrag von F3K Total »

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

Re: Verständnisfrage zu eigenen Objekte mit Unter-Objekten

Beitrag von saturus »

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

Code: Alles auswählen

redim preserve  oKontakt(1).oAdressen(1)
Dieser Befehl ging leider nicht, aber durch die Verwendung des "TempObjektes" kann man auch ein Unterobjekt (neu-)dimmensionieren.
Antworten