Tech Articles


Sorting a string array


I had a need to sort a string array and I found some code on Real Gagnon’s website that sorted numbers by creating a DataStore/DataWindow on the fly and used that to sort. Someone added a comment that for strings you need to define the column as char to avoid errors. I improved the code by adding a loop to determine the longest string in the array and using that when defining the DataWindow source.

 

public function boolean of_sortarray (ref string as_array[], string as_order);// —————————————————————————–

// SCRIPT:     of_SortArray

//

// PURPOSE:    This function sorts the passed array using a DataStore created

// on-the-fly.

//

// This is based on code from Real Gagnon:

// http://www.rgagnon.com/pbdetails/pb-0114.html

//

// ARGUMENTS:  as_array – Array of values to sort

// as_order – The sort order:

//

// Order value Resulting sort order

// ———————— —————————

// a, asc, ascending, ai, i Case-insensitive ascending

// d, desc, descending, di Case-insensitive descending

// as, s Case-sensitive ascending

// ds Case-sensitive descending

//

// DATE        PROG/ID DESCRIPTION OF CHANGE / REASON

// ———-  ——– —————————————————–

// 09/27/2016 RolandS Initial Coding

// —————————————————————————–

 

DataStore lds_sort

String ls_source, ls_error

Long ll_idx, ll_max, ll_len, ll_maxlen

Integer li_rc

 

// determine maximum length of values

ll_max = UpperBound(as_array)

For ll_idx = 1 To ll_max

  ll_len = Len(as_array[ll_idx])

  If ll_len > ll_maxlen Then

  ll_maxlen = ll_len

  End If

Next

 

// build DataWindow source code

ls_source = “release 6; datawindow( processing=0 ) ” + &

  “table(column=(type=char(” + String(ll_maxlen) + &

  “) name=array dbname=~”array~” ) )”

 

// create DataStore

lds_sort = Create DataStore

li_rc = lds_sort.Create(ls_source, ls_error)

If li_rc = 1 Then

  // put data into DataStore

  lds_sort.Object.array.Current = as_array

  // sort the data

  lds_sort.SetSort(“array ” + as_order)

  lds_sort.Sort()

  // set array to sorted data

  as_array = lds_sort.Object.array.Current

Else

  Return False

End If

 

// destroy DataStore

Destroy lds_sort

 

Return True

 

end function

Comments (2)
Wednesday, Jun 12 2019

ls_source = “release 6; datawindow( processing=0 ) ” + &

Instead of hardcodidng release number, you can create a function uf_get_pb_version() with this code:

/**********************************************************************************************************************
Dscr: returns the major version number of PowerBuilder, for example: "9" (not "9.0"!)
***********************************************************************************************************************
Ret: PB version as string
**********************************************************************************************************************/
int li_rc
string ls_pb_version
environment lenv

li_rc = GetEnvironment(ref lenv)
if li_rc 1 then
MessageBox(this.ClassName() + ".uf_get_pb_version", "GetEnvironment() failed.", StopSign!)
return ""
end if

ls_pb_version = String(lenv.pbmajorrevision)

return ls_pb_version

Comment was last edited 7 years ago by Michael Zuskin
0

Wednesday, Jun 12 2019

The release version of a DataWindow object does not have to match the version of PowerBuilder you are using, it only has to be lower. You could make it match with GetEnvironment but it is not necessary.

0

Find Articles by Tag

OAuth 2.0 Source Control Authorization Sort Branch & Merge SnapObjects Graph Variable PBDOM C# TLS/SSL RESTClient RichTextEdit Control .NET Std Framework Deployment Array Installation Database SQL PDF SVN ODBC OLE Elevate Conference XML Syntax CoderObject Testing .NET DataStore 64-bit Database Object TortoiseGit PowerBuilder Export SnapDevelop Encoding PBVM Window Error Event SqlExecutor Outlook DataWindow JSON WebBrowser TFS OAuth CI/CD IDE DataWindow PBNI Mobile PowerScript (PS) Bug PowerBuilder Compiler SDK 32-bit Import JSON Database Table Authentication Debugger PowerBuilder (Appeon) Database Painter Messagging Stored Procedure Web Service Proxy Interface .NET Assembly Trial Visual Studio OrcaScript Export JSON Linux OS DragDrop Event Handler Windows OS Oracle PowerServer Mobile Event Handling DataType JSON PDFlib Application Import PowerServer Web Performance Service Text Encryption Database Table Schema GhostScript Database Profile Automated Testing Windows 10 Icons UI Themes Resize Expression SOAP UI Class Database Table Data MessageBox Icon Script Debugging WinAPI iOS External Functions Platform CrypterObject Migration InfoMaker Git PostgreSQL ODBC driver SQL Server ActiveX RibbonBar Design JSONParser SqlModelMapper Configuration Validation UI Modernization TreeView Charts REST Repository Jenkins COM API Source Code JSONGenerator PostgreSQL HTTPClient BLOB License Model Filter Excel Web API File DLL NativePDF Azure DevOps Debug PFC Data Open Source Database Connection RibbonBar Builder Menu Transaction Android