SELECTSTR ERROR

kirkostaskirkostas Member Posts: 127
Hi,

I am using the SYSTEM String function SELECTSTR to split a Comma Separated string.
CommaStr := 'Kostas,Tassos,Kostas';
MyStr := SELECTSTR(2,CommaStr);
This code produce an error.
Error message:
'STRSET' cannot contain 'Kostas' more than once.

Why?
I want to split this string into an array. How?
kirkostas

Comments

  • DaveTDaveT Member Posts: 1,039
    Hi,

    ..because it using the string as an option string so it need a unique code per option.

    It wouldn't be hard to code this yourself
    Dave Treanor

    Dynamics Nav Add-ons
    http://www.simplydynamics.ie/Addons.html
  • kirkostaskirkostas Member Posts: 127
    Damn !!! ](*,)

    Ok thanks for the quick answer.
    I will use some code :wink: eventually.
    kirkostas
  • kirkostaskirkostas Member Posts: 127
    edited 2008-12-09
    This function is called Distinct_Values. It takes a comma separated string, check for duplicate values and removes them. I use SELECTSTR function but I add a custom number at the end of each string before pass it to Distinct_Values function since it works like an Option string.

    For example:
    Distinct_Values('Kostas'+'1,'+'Tassos'+'2,'+'Kostas'+'3');
    
    //Split Values
    FOR i := 1 TO 3 DO BEGIN
      Arr1[i] := SELECTSTR(i,CommaString);
      Arr1[i] := COPYSTR(Arr1[i],1,STRLEN(Arr1[i])-1);
    END;
    
    //Collect Distinct Values
    FOR i := 1 TO 3 DO BEGIN
      Found := FALSE;
      tmp_check := Arr1[i];
      FOR z := 1 TO 3 DO BEGIN
        IF Arr2[z] = tmp_check THEN BEGIN
          IF NOT Found THEN
            Found := TRUE;
        END;
      END;
      Added :=FALSE;
      IF NOT Found THEN BEGIN
        FOR z := 1 TO 3 DO BEGIN
          IF Arr2[z] = '' THEN BEGIN
            IF NOT Added THEN BEGIN
              Arr2[z] := tmp_check;
              Added := TRUE;
            END;
          END;
        END;
      END;
    END;
    
    //Add Distinct Values
    FOR i := 1 TO 3 DO
      IF Arr2[i] <> '' THEN
        RelativeDocs := RelativeDocs + Arr2[i] + ' ';
    
    //Trim
    RelativeDocs := DELCHR(RelativeDocs,'<>',' ');
    

    Variables:
    Arr1 Code 30 (3 Dimensions)
    Arr2 Code 30 (3 Dimensions)
    tmp_check Code 30
    Found Boolean
    Added Boolean
    z Integer
    i Integer

    Parameters:
    CommaString Text 100

    You can change whatever you want, you can have 500 Dimensions and bigger text strings if you like.
    You can make it return comma separated text if you like too.
    The code just drops the empty strings and collect only the ones with a value and which are not duplicated.
    kirkostas
  • DaveTDaveT Member Posts: 1,039
    Wow that didn't take you long - well done :wink:
    Dave Treanor

    Dynamics Nav Add-ons
    http://www.simplydynamics.ie/Addons.html
Sign In or Register to comment.