[Gelöst]MAXSTRLEN für Array-Elemente

31. März 2009 11:50

Hallo alle!

Die Funktion MAXSTRLEN gibt die als Maximum definierte Länge einer String-Variable zurück.
Nun habe ich einen Text-Array mit dem Dimensions 10;2 und einer Länge von 30.

Wie can ich die als Maximum definierte Länge der Array-Elemente im code ermitteln?

Vielen Dank im Voraus für eure Hilfe!
Gerald
Zuletzt geändert von BadGer am 31. März 2009 18:47, insgesamt 3-mal geändert.

Re: MAXSTRLEN für Array-Elemente

31. März 2009 12:09

Meinst das hier (für Element 3,4)?

Code:
MaxLänge := MAXSTRLEN(DeinArray[3][4]);

Re: MAXSTRLEN für Array-Elemente

31. März 2009 12:44

Hallo Natalie!

Danke für die rasche Antwort!

Mir ist nur nicht klar, wie ich die Elemente in einem Array ansprechen muss.
Ich stelle es mal bildlich dar: siehe Illu1.GIF im Anhang.
Wie greife ich zB auf das Element mit dem Inhalt 'Z2S2' zu?
Ich hätte es so probiert:
MESSAGE(MeinArray[2][2]);

Da bekomme ich allerdings 'Z2S1' zurück.
Irgendwie ist es völlig egal, was ich als zweite Zahl angebe, ich erhalte immer den Wert der ersten Spalte.
Mir ist auch aufgefallen, dass im Debugger im Watch-Bereich der Array einspaltig gelistet wird, und zwar von [1] bis [20], obwohl die Dimensions mit 10;2 festgelegt sind.
Ich werde daraus nicht schlau...

LG Gerald
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Re: MAXSTRLEN für Array-Elemente

31. März 2009 13:03

Mit welchem Quelltext hast du den Array gefüllt?
Was steht in der Eigenschaft "Dimensions" der Arrayvariable?

Re: MAXSTRLEN für Array-Elemente

31. März 2009 13:13

Ich hab das grad bei mir mal nachgebaut:

Die linearisierte Ansicht im Debugger existiert bei mir auch, aber ich kann sauber auf jedes Feld zugreifen.

Re: MAXSTRLEN für Array-Elemente

31. März 2009 13:39

Hallo alle!

NAV hat offensichtlich eine sehr ungewöhnliche Art, Arrays zu dimensionieren.

'Dimensions: 10;2' erzeugt ein Array, das so aussieht: (siehe 'Illu2.GIF' im Anhang).
Um ein Array wie in 'Illu1.GIF' zu erzeugen, braucht man 'Dimensions: 10;10'.

Darauf muss man einmal kommen - die Doku legt diesen Gedanken jedenfalls nicht nahe...

Danke nochmal für eure Bemühungen!

LG Gerald
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Re: MAXSTRLEN für Array-Elemente

31. März 2009 14:11

dein zweites angehängtes Bild ergibt überhaupt keinen SInn, sowas ist kein Array mehr...

Re: MAXSTRLEN für Array-Elemente

31. März 2009 16:11

Hallo nochmal!

Ja - ich bin mittlerweile draufgekommen, dass ich die Arrays in NAV immer noch nicht verstehe...

Ich habe jetzt ein Array gefüllt mit:
MeinArray[1][1] := 'Z1S1'; MeinArray[1][2] := 'Z1S2'; ... usw. (siehe erste Grafik)
Dann wollte ich die Inhalte der Elemente in der 3. Zeile löschen mit:
MeinArray[3][1] := ''; MeinArray[3][2] := ''
Anschließend habe ich ein COMPRESSARRAY über das Array laufen lassen.
Was herausgekommen ist, seht ihr in der zweiten Grafik.
Was ich haben wollte, in der dritten Grafik.

Code zum Nachmachen:
Code:
ltxArray[1][1] := 'Label1:'; ltxArray[1][2] := 'Text1';
ltxArray[2][1] := 'Label2:'; ltxArray[2][2] := 'Text2';
ltxArray[3][1] := ''; ltxArray[3][2] := '';
ltxArray[4][1] := 'Label4:'; ltxArray[4][2] := 'Text4';
ltxArray[5][1] := 'Label5:'; ltxArray[5][2] := 'Text5';

COMPRESSARRAY(ltxArray);

lchCR := 13;
lchLF := 10;

ltxMessage := '';
ltxMessage += (ltxArray[1][1] + ltxArray[1][2] + FORMAT(lchCR) + FORMAT(lchLF));
ltxMessage += (ltxArray[2][1] + ltxArray[2][2] + FORMAT(lchCR) + FORMAT(lchLF));
ltxMessage += (ltxArray[3][1] + ltxArray[3][2] + FORMAT(lchCR) + FORMAT(lchLF));
ltxMessage += (ltxArray[4][1] + ltxArray[4][2] + FORMAT(lchCR) + FORMAT(lchLF));
ltxMessage += (ltxArray[5][1] + ltxArray[5][2] + FORMAT(lchCR) + FORMAT(lchLF));

MESSAGE(ltxMessage);

Die Variablen dazu:
Name DataType Subtype Length Dimensions
lchCR Char
lchLF Char
ltxMessage Text 1024
ltxArray Text 30 10;10

Der Code passt nicht ganz zu den Grafiken, funktioniert aber wie beschrieben.

Gerald
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Re: MAXSTRLEN für Array-Elemente

31. März 2009 16:24

Warum arbeitet Du mit COMPRESSARRAY ???

Ich glaube Du solltest uns erstmal beschreiben was Du machen möchtest, dann können wir Dir auch mehr helfen.

Gruß Hoschi Blume

Re: MAXSTRLEN für Array-Elemente

31. März 2009 16:29

Hoschi Blume hat geschrieben:Ich glaube Du solltest uns erstmal beschreiben was Du machen möchtest, dann können wir Dir auch mehr helfen.


-->

BadGer hat geschrieben:Anschließend habe ich ein COMPRESSARRAY über das Array laufen lassen.
Was herausgekommen ist, seht ihr in der zweiten Grafik.
Was ich haben wollte, in der dritten Grafik.


Die Frage war: Wie kann mittels COMPRESSARRAY eine leere Zeile (mit mehreren Spalten) eliminiert werden?
Ich hatte bisher COMPRESSARRAY nur bei eindimensionalen Arrays verwendet (Standard).

Re: MAXSTRLEN für Array-Elemente

31. März 2009 18:46

Hallo alle!

Jetzt bin ich endlich zu einer Lösung gekommen!

Um einen Array mit 2 "Spalten" und 10 "Zeilen" zu bekommen, braucht man 'Dimensions 10;2'.
Der richtige Zugriff auf zB das Element Z3S2 lautet: MyArray[3,2] (Syntax stammt aus dem 'Application Designer’s Guide')
Wenn MyArray[3,1] und MyArray[3,2] beide einen leeren String enthalten, funktioniert COMPRESSARRAY genauso, wie wir es von eindimensionalen Arrays gewohnt sind.

Die Doku zum Thema 'Dimensions' ist also definitv falsch:
"To access the elements in the array, use a syntax like this:
A[2][3][2]"

Danke noch mal für eure Hilfe!

LG Gerald