Welcome to the SRP Forum! Please refer to the SRP Forum FAQ post if you have any questions regarding how the forum works.

SRP Clean Array

Do you have any idea why the free utility function, SRP_Clean_Array, would stop working? It was working fine, but suddenly doesn’t work. It will clean arrays like @FM:@FM:@FM:”Don”:@FM:”Bob”:@FM:@FM, but it will not clean arrays that typically come from EditTables like @VM:@VM:@VM:@FM:@VM:@VM:@VM:@FM:@VM:@VM:@VM. It’s got me stumped. I have used the following syntax:

NewArray = SRP_Clean_Array(ExistingArray)
OR
NewArray = SRP_Clean_Array(ExistingArray, @FM, "")
OR
NewArray = SRP_Clean_Array(ExistingArray, @FM, "UNIQUE")

None of those are cleaning the array of those lines that have @VM delimeters in it.

Any thoughts?

Comments

  • SRP_Clean_Array only works on single dimensioned arrays. It does, however, allow you to specify any delimiter, so you could loop through each field , clean each array of values, and reassemble the 2D array at the end.
  • I was also looking for this to trim @FMs where there were empty @VMs.
    I had code to do this manually, but performance was lacking, so with a bit of a think I have a solution in a procedure.
    Given the assumption that every row has the same number of @VMs, count the first row and the swap these out.
    This is based on ARRAY property, but if you are using the LIST property then it is even easier as the rotates are not needed.

    Seems to work, but I have just added to my code and not tested fully.

    Colin

    TABLE=SRP_Rotate_Array(TABLE)
    MVCount=COUNT(TABLE<1>,@VM)
    String=STR(@VM,MVCount):@FM
    SWAP String WITH "" IN TABLE
    TABLE=SRP_Rotate_Array(TABLE)
  • FWIW, this is what we use for removing trailing delimiters (except RM) and spaces at any nested level:


    utf8mode = isUTF8()
    If utf8mode then Call SetUTF8( 0) ;* system delimiter bytes will never be contained within OI UTF8 multi-byte characters!

    pos = len( data)
    curr.delim = 5; data.delim = 6
    Loop while pos
    delim = index( \FAFBFCFDFEFF\, data[ pos, 1], 1)
    If delim then
    If delim <= curr.delim then
    If delim < data.delim then data[ pos, 1] = ''
    End else
    If not( curr.delim) or delim > data.delim then data.delim = delim
    curr.delim = delim
    End
    End else
    If curr.delim then
    If data[ pos, 1] = ' ' then
    data[ pos, 1] = ''
    end else
    curr.delim = 0
    End
    End
    End
    pos -= 1
    Repeat
    If utf8mode then Call SetUTF8( utf8Mode)
    Cheers, M@
Sign In or Register to comment.