FUNCTION F_ELEMENT, element_nr, delimiter, string, ALL=all ;=============================================================================== ; (c) 1990 - khd c/o FU BERLIN. A l l r i g h t s r e s e r v e d. || ; ** No part of this software package may be reproduced, transmitted, || ; 1992 transcribed, stored in a retrieval system, or translated into || ; any form by any means without the w r i t t e n permission of || ; Karl-Heinz Dittberner-FU BERLIN, Arnimallee 22, D-1000 Berlin 33 || ;=============================================================================== ; PRO:F_ELEMENT.PRO K.-H. Dittberner - 18.SEP.1990 ; V 01.5 P 476/33 - 31.JUL.1992 ; ; IDL(V2.0)-Routine: Nachbildung der DCL Lexical Function F$ELEMENT von VAX/- ; VMS: Extrahiert ein Element aus einer Liste von String- ; elementen, die durch Zeichen (delimiter) getrennt sind. ; ; HINWEISE: Das Keyword /ALL ist gegenueber VMS eine Erweiterung. ; Eine Beschreibung dieses Programms findet man in den ; wdv-notes Nr.105. ; ; KEYWORDS: ; /ALL = Es werden alle Elemente in einem String-Array uebergeben. ; Fuer die VAR element_nr kann dabei ein beliebiger Wert ; angegeben werden. ;=============================================================================== ; Quelle: Do-it-yourself! Merkposten: o ; o ; Aufruf: z.B. x=F_Element(1," ",string) o ; o ;=============================================================================== ; Aenderungen: [26/4/91-khd] => V 01.1: ; - Experimentierfassung ist fertig. ; [29/4/91-khd] => V 01.2: ; - Ueberarbeitet und Kommentierung zugefuegt. ; - On_Error, 2 aktiviert. ; [7/5/92-khd] => V 01.3: ; - Umstellung auf lokale VAR str statt globaler VAR string; ; damit bleibt die VAR string unveraendert. ; [16/5/92-khd] => V 01.4: (Copy => DK) ; - Bei /ALL Return,temp(1:nr-1) ; => Return,temp(1:nr) geaendert. ; [31/7/92-khd] => V 01.5: (Copy => AG GRUE, SEIDLER, DK, FUHRY) ; - Die Kommentierung ergaenzt. ;=============================================================================== ; 1. Prolog, Variablen und Konstanten: ;=============================================================================== ; On_Error, 2 ; Return => Ruf. Programm. str = string str = StrCompress(str) + delimiter ; Ein Trick! length_delimiter = StrLen(delimiter) ; Auch mehrere Zeichen sind erlaubt. ; ;=============================================================================== ; 2. Behandlung der Keywords (Default-Werte): ;=============================================================================== ; IF Keyword_Set(all) then temp = Replicate("",1) ; ;=============================================================================== ; 3. Ausfuehrung der Nachbildung von F$ELEMENT: ;=============================================================================== ; nr = 0 i = 0L first = i i = StrPos(str,delimiter,i) ; Pos. 1. Auftretens von delimiter. While (i ne -1) DO $ ; Wenn der delimiter enthalten ist: Begin If Keyword_Set(all) $ then temp = [temp, StrMID(str,first,i-first)] $ else If (nr eq element_nr) $ then Return, StrMID(str,first,i-first) first = i + length_delimiter i = StrPos(str,delimiter,i+1) nr = nr + 1 EndWhile ; ;=============================================================================== ; 4. Schluss: ;=============================================================================== ; Ende: If Keyword_Set(all) $ then Return, temp(1:nr) $ ; Alle Elemente uebergeben. else Return, delimiter ; Trennzeichen ist nicht enthalten. END ;===============================================================================