I suspect a Bob and Börge complicity for the addition
of <ARRAY SORT ... , COLLATE cString> in PBWin8 and PBCC4,
it is very nice an allow us to do sorting in a powerfull way.
Here is a small demo to show how to sort while ignoring letters with accent...
Have fun
Pierre
[This message has been edited by Pierre Bellisle (edited December 18, 2006).]
of <ARRAY SORT ... , COLLATE cString> in PBWin8 and PBCC4,
it is very nice an allow us to do sorting in a powerfull way.
Here is a small demo to show how to sort while ignoring letters with accent...
Have fun
Pierre
Code:
#COMPILE EXE '# Win 8.03 # #DIM ALL #INCLUDE "WIN32API.INC" '# 2005-01-14 # '______________________________________________________________________________ FUNCTION PBMAIN() AS LONG LOCAL I AS LONG LOCAL Lower AS LONG LOCAL Higher AS LONG LOCAL Buffer AS STRING LOCAL NoAccentTable AS STRING LOCAL sBuff AS STRING * 2 LOCAL pNoAccentTable AS BYTE POINTER LOCAL pBuff AS BYTE POINTER LOCAl pByte AS BYTE POINTER ' ' 0 to 64 AZ <- az 91 to 191 'NoAccentTable = CHR$(0 TO 64, 97 TO 122, 91 TO 191, _ ' _ ' Àa Áa Âa Ãa Äa Åa Æ Çc Èe Ée Êe Ëe Ìi Íi Îi Ïi ' 97, 97, 97, 97, 97, 97, 198, 99, 101, 101, 101, 101, 105, 105, 105, 105, _ ' _ ' Ð Ñn Òo Óo Ôo Õo Öo × Ø Ùu Úu Ûu Üu Ýy Þ ß ' 208, 110, 111, 111, 111, 111, 111, 215, 216, 117, 117, 117, 117, 121, 222, 223, _ ' _ ' àa áa âa ãa äa åa æ çc èe ée êe ëe ìi íi îi ïi ð ñn ' 97, 97, 97, 97, 97, 97, 230, 99, 101, 101, 101, 101, 105, 105, 105, 105, 240, 110, _ ' _ ' òo óo ôo õo öo ÷ ø ùu úu ûu üu ýy þ ÿy ' 111, 111, 111, 111, 111, 247, 248, 117, 117, 117, 117, 121, 254, 121) NoAccentTable = CHR$(0 TO 255) pNoAccentTable = STRPTR(NoAccentTable) pBuff = VARPTR(sBuff) FOR pByte = pNoAccentTable + 127 TO pNoAccentTable + LEN(NoAccentTable) - 1 'Start at char 127 becose no accent before 'If FoldString return = 2 then an accentued char is found so, split it in 2 'First char in Buff is a character like "e", second char is an accent like "`" IF FoldString(%MAP_COMPOSITE, BYVAL pByte, 1, BYVAL pBuff, 2) = 2 THEN @pByte = @pBuff 'Copy only first character in sDest and leave the "accent character" END IF NEXT CharLower BYVAL(STRPTR(NoAccentTable) + 1) '+ 1 to skip first CHR$(0) 'MSGBOX MID$(NoAccentTable, 2) Lower = 0 Higher = 6 DIM SomeArray(Lower TO Higher) AS STRING SomeArray(0) = "Börge" SomeArray(1) = "BOB" SomeArray(2) = "Bôris" SomeArray(3) = "Burt" SomeArray(4) = "Baptist" SomeArray(5) = "Bobby" SomeArray(6) = "Ben" Buffer = "Unsorted data..." + $CRLF + $CRLF FOR I = Lower TO Higher Buffer = Buffer & SomeArray(I) & $CRLF NEXT Buffer = Buffer & $CRLF & $CRLF & "Sorted, with collate UCase" & $CRLF & $CRLF ARRAY SORT SomeArray(), COLLATE UCASE FOR I = Lower TO Higher Buffer = Buffer & SomeArray(I) & $CRLF NEXT Buffer = Buffer & $CRLF & $CRLF & "Sorted, with collate String," & $CRLF & _ "ignoring accent" & $CRLF & _ "and case insensitive" & $CRLF & $CRLF ARRAY SORT SomeArray(), COLLATE NoAccentTable FOR I = Lower TO Higher Buffer = Buffer & SomeArray(I) & $CRLF NEXT MSGBOX Buffer,, "ArraySort, no accent, no case" END FUNCTION '______________________________________________________________________________
[This message has been edited by Pierre Bellisle (edited December 18, 2006).]
Comment