PDA

View Full Version : %size oder %len



coolie
20-01-06, 09:32
Hallo *all,

ich hab immer noch nicht genau den Unterschied zwischen %size und %len begriffen. Tststs....

Nehmen wir an, ich habe ein 10-stelliges Alphafeld mit Inhalt 'ABC'.

Wie bekomme ich heraus, wie lange das Alphafeld (an sich) ist und wie bekomme ich heraus wie lange der belegte Teil des Feldes ist?

Vielen Dank für Antworten.

Gruß
coolie

Frank Hildebrandt
20-01-06, 09:49
%SIZE gibt die Anzahl der Bytes an, die eine Variable belegt. %LEN gibt eben die Länge in Stellen an, die eine Variable belegt. Anzahl Bytes und Anzahl Stellen können differieren.
Die Länge eines Alphafeldes ermittelt sich mit %SIZE(Feld) oder %LEN(Feld). Bei alphanumerischen Feldern ist die Anzahl der Bytes immer gleich der Anzahl Stellen. Den tatsächlich verwendeten Teil eines Alphafeldes ermittelt man mit %LEN(%TRIMR(Feld)).

Fuerchau
20-01-06, 09:51
Bei fest definierten Stellen liefer %size und %len das selbe Ergebnis.
Der Unterschied gilt nur für Felder mit varying-Attributen.
%size liefert die definierte Länge, %len die aktuelle Länge.

Möchte ich die Länge des Inhaltes eines festen Feldes wissen, so gibt es 2 Möglichkeiten:
%len(%trim(feld)) => eliminiert führende und hinten stehende Leerzeichen und gibt dann die Länge der relevanten Information.
%checkr(' ':Feld:1) liefert die letzte Position eines Zeichens <> Blank.

Daran kann man auch den Unterschied sehen.
Führende Leerzeichen werden ggf. benötigt.

Allerdings ist bei variablen Feldern zu beachten:
%len liefert die aktuelle Länge incl. Leerzeichen !
%checkr funtioniert auch bei variablen Feldern.

RobertMack
20-01-06, 09:52
entfernt - die Kollegen waren schneller (und besser ;-)

Fuerchau
20-01-06, 09:55
@Robert
%scan kannst du aber nur verwenden, wenn keine Leerzeichen zwischen den Daten erlaubt sind, sonst gehen dir Daten beim %subst verloren. Ausserdem liefert %scan 0, wenn kein Leerzeichen vorhanden ist.
%checkr wäre da besser ;)

RobertMack
20-01-06, 09:57
@Fuerchau

genau das ist mir im Moment des sendens aufgegangen, Danke!