2-Dim Array füllen ... [erledigt]

Zugriff, Engines, Konvertierung. Von ADS über DBF bis zu SQL.

Moderator: Moderatoren

Antworten
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

2-Dim Array füllen ... [erledigt]

Beitrag von AUGE_OHR »

ich möchte Felder ( Inhalt ) in ein Array schieben

Code: Alles auswählen

   nLen := LEN(::aFields)
   // ist das richtig ?
   aDummy := ARRAY(nLen)
   ::aSource := {}
   iMax := LASTREC()
   FOR i := 1 TO iMax
      AADD(::aSource,aDummy)
   NEXT
er scheint das Array so wie gewünscht anzulegen aber wenn ich es fülle dann passiert das
Alles_Array.JPG
Alles_Array.JPG (141.15 KiB) 4466 mal betrachtet
es geht um die Zeile

Code: Alles auswählen

::aSource[nRec][j] := cText
er "müsste" doch in ein "definiertes" Element schreiben ...
wenn man sich das links ansieht : er "schreibt" es in JEDE Row ... wie ist das möglich :banghead:

Kann das mit meinem Code zusammenhängen

Code: Alles auswählen

PROCEDURE Main
    oBrowse:RecLink := {| nTo, uNIL, oSelf| PostAppEvent(MY_REC,nTo,, oDlg)}
    oBrowse:StartListView()
    ...
    DO CASE
         CASE nEvent = MY_REC
             oBrowse:ShowRecord(mp1,aFields,cAlias)

CLASS MyBrowse FROM xbp_listview
INLINE METHOD StartListView()
     // subscript LVN_GETDISPINFO Notify Event 
     ::SetLvNotifyCB( LVN_GETDISPINFO,{|o,notify_code,lp| ::OnDISPINFO(o,lp)})

INLINE METHOD OnDISPINFO(o,lp)
            IF VALTYPE( ::RecLink  ) == "B"
               // eval Codebock
               EVAL(::RecLink,::nItemNo,,self)

INLINE METHOD ShowRecord(nTo,aFields,cAlias)
       // assign Text to Array Element
      ::aSource[nRec][j] := cText
ich reagiere auf den LVN_GETDISPINFO Notify Event im GUI Thread mit der Method ::OnDISPINFO(o,lp)
Dort führe ich ein EVAL(::RecLink,::nItemNo,,self) aus worauf ich im Xbase++ Thread die Method oBrowse:ShowRecord(mp1,aFields,cAlias) aufrufe in der das Problem auftaucht.

ich rufe ::aSource auch nur innerhalb der Class auf ... aber woher kommt der komische Effekt :?:
oder ist mein Intro Code doch verkehrt ... ( habe es auch mit aDummy[nLen] versucht ... das selbe Problem)
Zuletzt geändert von AUGE_OHR am Do, 07. Mai 2015 9:55, insgesamt 1-mal geändert.
gruss by OHR
Jimmy
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: 2-Dim Array füllen ...

Beitrag von brandelh »

array inhalte sind per Referenz und so sind die immer gleich.
Array in Schleife je Satz erzeugen.
Gruß
Hubert
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: 2-Dim Array füllen ...

Beitrag von AUGE_OHR »

so hier als (Mini) Demo

Code: Alles auswählen

PROCEDURE Main
LOCAL nLen := 1+1
LOCAL aDummy[nLen]
LOCAL i,iMax
LOCAL aSource := {}

   FOR i := 1 TO 5
      AADD(aSource,aDummy)
   NEXT

   FOR i := 1 TO 5
      aSource[i][nLen] := i
   NEXT

   ? VAR2CHAR(aSource)
   WAIT

RETURN
ich "möchte" die Nummern 1 - 5 zu sehen ... aber es kommt nur 5 :banghead:
gruss by OHR
Jimmy
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: 2-Dim Array füllen ...

Beitrag von AUGE_OHR »

brandelh hat geschrieben:array inhalte sind per Referenz und so sind die immer gleich.
sorry ... das verstehe ich nicht ?

wieso kann ich dem Element aArray[x,y] keine Wert für "das" Element zuweisen :?:

Code: Alles auswählen

PROCEDURE Main
LOCAL aSource := {}   
LOCAL aDummy := {0,0}
LOCAL i

   FOR i := 1 TO 5
      AADD(aSource,aDummy)
   NEXT
   ? aSource[3,1]  := 3 // das ist doch nur 1 (Sub) Element ... oder ?
   ? VAR2CHAR(aSource)
   WAIT
RETURN
er geht ja immer auf "alle" Elemente ... "was" verstehe ich da nicht :?:
brandelh hat geschrieben:Array in Schleife je Satz erzeugen.
bei erzeugen ist ja der Rest noch leer und soll erst gefüllt werden...
gruss by OHR
Jimmy
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16502
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: 2-Dim Array füllen ...

Beitrag von Martin Altmann »

Dein erstes Aad ist falsch, wie Hubert bereits schrieb.
Statt AADD(aSource,aDummy) musst du AADD(aSource,aClone(aDummy)) benutzen!

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: 2-Dim Array füllen ...

Beitrag von AUGE_OHR »

Martin Altmann hat geschrieben:Dein erstes Aad ist falsch, wie Hubert bereits schrieb.
Statt AADD(aSource,aDummy) musst du AADD(aSource,aClone(aDummy)) benutzen!
em, äh ... JA jetzt hab ich es verstanden ;)
gruss by OHR
Jimmy
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: 2-Dim Array füllen ... [erledigt]

Beitrag von brandelh »

genau, wobei ich das dann eher so schreibe, Ergebnis ist gleich ;-)

Code: Alles auswählen

   FOR i := 1 TO 5
      aDummy := {0,0}
      AADD(aSource,aDummy)
   NEXT
oder einfacher ...

Code: Alles auswählen

   FOR i := 1 TO 5
      AADD(aSource,{0,0})
   NEXT
eben in der Schleife neu erstellen ;-)
Gruß
Hubert
Antworten