Spalten eines Array

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

Moderator: Moderatoren

Antworten
saul
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 284
Registriert: So, 26. Mär 2006 12:23

Spalten eines Array

Beitrag von saul »

Hallo,
in xbpBrowse kann man sich die Spaltenposition verändern. Geht so etwas bei mehrdimensionalen Array´s auch? Die Hilfe sagt dazu nichts und einen Befehl habe ich dazu auch nicht gefunden.

Beispiel:
Array vorher
Spalte1 Spalte2 Spalte3
Spalte1 Spalte2 Spalte3

Nacher
Spalte3 Spalte1 Spalte2
Spalte3 Spalte1 Spalte2

mfg
Wolfgang
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Spalten eines Array

Beitrag von brandelh »

Hi,

meinst du jetzt die Anzeige einer Spalte im Browser ?

Beim Aufbau entscheidest du, welche Browserspalte welche Arrayspalte darstellt.
Nach dem Aufbau könnte man das bestimmt ändern, müsste dann aber den Browser neu anzeigen lassen.

meinst du die Daten im Array selbst, von Spalte x nach Spalte Y ?
Das müsste man umkopieren ... allerdings sehe ich darin keinen Sinn !
Es ist übrigens empfehlenswert nicht direkt die Array Spaltennummer zu verwenden, sondern DEFINES, das ist leichter zu lesen und zu warten:

Code: Alles auswählen

aAdresse := { { "ID","Name", "Vorname", "Straße","Plz","Ort",...}, ... }
nAnzahl := len(aAdresse)

for i := 1 to nAnzahl
    if aAdresse[i, 5] = "76543"
       ...
       ? alltrim(aAdresse[i,3])+" "+alltrim( aAdresse[i,2])
       ? aAdresse[i,4]       
       ? alltrim(aAdresse[i,5])+" "+alltrim( aAdresse[i,6])
...
schwer zu lesen und fehlerträchtig. Wehe wenn jemand oben der Meinung ist, Vorname soll in der Spalte vor Name is Array ... #-o
So ist es besser (siehe auch directory()):

Code: Alles auswählen

aAdresse := { { "ID","Name", "Vorname", "Straße","Plz","Ort",...}, ... }
#define ADR_ID 1
#define ADR_NAME 2
#define ADR_VNAME 3
#define ADR_STR 4
#define ADR_PLZ 5
#define ADR_ORT 6

nAnzahl := len(aAdresse)

for i := 1 to nAnzahl
    if aAdresse[i, ADR_PLZ ] = "76543"
       ...
       ? alltrim(aAdresse[i,ADR_VNAME])+" "+alltrim( aAdresse[i,ADR_NAME])
       ? aAdresse[i,ADR_STR]       
       ? alltrim(aAdresse[i,ADR_PLZ])+" "+alltrim( aAdresse[i,ADR_ORT])
...
Bei der Anwendung spielt die tatsächliche Spalte keine Rolle mehr - solange die DEFINE richtig sind ;-)
Gruß
Hubert
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Spalten eines Array

Beitrag von brandelh »

Ach ja, wie ändert man ein Array ...

aDaten soll Spalte 3 mit 1 getauscht werden.
Da Xbase keinen direkten TAUSCH Befehl hat, braucht man eine Variable als Zwischenspeicher.
Man könnte direkt aZeile bearbeiten, und den letzten Parameter auf .t. setzen, ich aberbeite aber lieber direkt mit dem Array.
nIndex ist ein undokumentierter 2 Parameter, der die Zeile angibt, cMeinLocalVar erstellt im CodeBlock eine lokale Variable, die ich als Zwischenspeicher nutze.

Code: Alles auswählen

aEval( aAdresse , {| aZeile, nIndex, cMeineLocalVar|  cMeineLocalVar := aAdresse[nIndex,3], ;
                                                                              aAdresse[nIndex,3] := aAdresse[nIndex,2],   ;
                                                                              aAdresse[nIndex,2] := cMeineLocalVar } )
Die DENINE müsste man nun natürlich auch anpassen, falls verwendet ;-)
Gruß
Hubert
Antworten