Jump to content
• Sign Up

# Ascending sort of number sequence

## Recommended Posts

Hello everyone,

How can I display in ascending  sequence some numbers stored in a string variable?

```\$str = "18,03,48,23"

MsgBox(0,"test",\$str)```

I would like it to display "03,18,23,48"

#### Share this post

##### Share on other sites

Here you have something to study and play with:

```#include<Array.au3>
\$str = "18,03,48,23"
\$aStr = StringSplit(\$str,",",2)
_ArraySort(\$aStr)
for \$x = 0 to UBound(\$aStr)-1
MsgBox(0,"value " & \$x ,\$aStr[\$x])
Next```

Jos

SciTE4AutoIt3 Full installer Download page   - Beta files

Live for the present,
Dream of the future,
Learn from the past.

#### Share this post

##### Share on other sites

That was what I needed, thanks a lot!

#### Share this post

##### Share on other sites
4 hours ago, liagason said:

... I would like it to display "03,18,23,48"

also take a look at the _ArrayToString() function...

small minds discuss people average minds discuss events great minds discuss ideas.... and use AutoIt....

#### Share this post

##### Share on other sites

A purely string, no arrays sort method.
This _StringSortRE() function bubble sorts the separated data within the string by a specified sort order (ascending or descending) and a specified data type (numerical or alphabetical).

```Local \$sStr = "12" & @CRLF & "34" & @CRLF & "56" & @CRLF & "7" & @CRLF & "89" & @CRLF & "10" & _
@CRLF & "11" & @CRLF & "13" & @CRLF & "14" & @CRLF & "15" & @CRLF & "16" & @CRLF & "99" ; & @CRLF

MsgBox(0, 'StringSortRE ', "Original: " & @CRLF & \$sStr & @CRLF & @CRLF & "_StringSortRE(\$sStr) Ascending Alpha - Default: " & @CRLF & _StringSortRE(\$sStr))
MsgBox(0, 'StringSortRE ', "Original: " & @CRLF & \$sStr & @CRLF & @CRLF & "_StringSortRE(\$sStr, 0, 1) Ascending Numeric: " & @CRLF & _StringSortRE(\$sStr, 0, 1))
MsgBox(0, 'StringSortRE ', "Original: " & @CRLF & \$sStr & @CRLF & @CRLF & "_StringSortRE(\$sStr, 1, 1) Descending Numeric: " & @CRLF & _StringSortRE(\$sStr, 1, 1))
MsgBox(0, 'StringSortRE ', "Original: " & @CRLF & \$sStr & @CRLF & @CRLF & "_StringSortRE(\$sStr, 1, 0) Descending Alpha: " & @CRLF & _StringSortRE(\$sStr, 1, 0))

Local \$str = "18,3,48,23"

MsgBox(0, 'StringSortRE ', "Original: " & @CRLF & \$str & @CRLF & @CRLF & "_StringSortRE(\$sStr) Ascending Alpha - Default: " & @CRLF & _StringSortRE(\$str, 0, 0, ","))
MsgBox(0, 'StringSortRE ', "Original: " & @CRLF & \$str & @CRLF & @CRLF & "_StringSortRE(\$sStr, 0, 1) Ascending Numeric: " & @CRLF & _StringSortRE(\$str, 0, 1, ","))
MsgBox(0, 'StringSortRE ', "Original: " & @CRLF & \$str & @CRLF & @CRLF & "_StringSortRE(\$sStr, 1, 1) Descending Numeric: " & @CRLF & _StringSortRE(\$str, 1, 1, ","))
MsgBox(0, 'StringSortRE ', "Original: " & @CRLF & \$str & @CRLF & @CRLF & "_StringSortRE(\$sStr, 1, 0) Descending Alpha: " & @CRLF & _StringSortRE(\$str, 1, 0, ","))

;For descending order, set \$iDescending to a numeric value not zero.
;To sort numbers, set \$iNumbers to a numeric value not zero. (zero is False, not zero is True)
;
Func _StringSortRE(\$sString, \$iDescending = 0, \$iNumbers = 0, \$d = @CRLF) ; (\$d = Delimiters)
Local \$iCount, \$bPass = False
StringRegExpReplace(\$sString, "(" & \$d & ")", " ")
\$iCount = @extended + 1 - StringRegExp(\$sString, "(" & \$d & ")\$") ; Trailing delimiter is ignored if present.
While Not \$bPass
\$bPass = True
For \$x = 0 To \$iCount - 2
\$sItem1 = StringRegExpReplace(\$sString, "(?s)(([^" & \$d & "]+" & \$d & "){" & \$x & "})([^" & \$d & "]+)(.*)", "\${3}") ; Get current \$x item
\$sItem2 = StringRegExpReplace(\$sString, "(?s)(([^" & \$d & "]+" & \$d & "){" & \$x & "})([^" & \$d & "]+)(" & \$d & ")([^" & \$d & "]+)(.*)", "\${5}") ; Get the next item after the current \$x item
If (\$iDescending = 0 And \$iNumbers <> 0 And Number(\$sItem1) > Number(\$sItem2)) Or _       ; (Ascending, Numeric)  (0,1)
(\$iDescending = 0 And \$iNumbers = 0 And \$sItem1 > \$sItem2) Or _                   ; (Ascending, Alpha)    (0,0)
(\$iDescending <> 0 And \$iNumbers <> 0 And Number(\$sItem1) < Number(\$sItem2)) Or _ ; (Descending, Numeric) (1,1)
(\$iDescending <> 0 And \$iNumbers = 0 And \$sItem1 < \$sItem2) Then                  ; (Descending, Alpha)   (1,0)
\$sString = StringRegExpReplace(\$sString, "(?s)(([^" & \$d & "]+" & \$d & "){" & \$x & "})([^" & \$d & "]+)(" & \$d & ")([^" & \$d & "]+)(" & \$d & ")?", "\${1}\${5}\${4}\${3}\${6}") ; Swap \$sItem1 and \$sItem2 i.e. swap back-reference \${3} and \${5}.
\$bPass = False
EndIf
Next
WEnd
Return \$sString
EndFunc   ;==>_StringSortRE```

## Create an account or sign in to comment

You need to be a member in order to leave a comment

## Create an account

Sign up for a new account in our community. It's easy!

Register a new account

## Sign in

Already have an account? Sign in here.

Sign In Now

• ### Similar Content

• By Inpho
Hi All,
I intend on keeping custom functions/UDFs (works in progress) here; if anyone wants to use any code, feel free.
String functions:
#AutoIt3Wrapper_AU3Check_Parameters=-d -w- 1 -w 2 -w 3 -w 4 -w 5 -w 6 #include-once ; #FUNCTION# ==================================================================================================================== ; Name ..........: _DateTimeGet ; Description ...: Returns the date and time formatted for use in sortable filenames, logs, listviews, etc. ; Syntax ........: _DateTimeGet(iType = 1[, \$bHumanFormat = False]) ; Parameters ....: \$iType - [optional] an integer value. Default is 1. ; 1 - Date and time in file-friendly format; 20190115_113756 ; 2 - Date in file-friendly format; 20190115 ; 3 - Time in file friendly format; 113756 ; \$bHumanFormat - [optional] a boolean value. Default is False. ; True - Includes slashes in the date and colons in the time with a space inbetween ; False - No slashes or colons included with an underscore inbetween ; Return values .: Success - String ; Failure - Sets @error to non-zero and returns an empty string ; Author ........: Sam Coates ; =============================================================================================================================== Func _DateTimeGet(\$iType = 1, \$bHumanFormat = False) If \$iType < 1 Or \$iType > 3 Then Return (SetError(-1, 0, "")) ;; Param1: ;; 1 = Date and time in file friendly format: 20190115_113756 ;; 2 = Date in file friendly format: 20190115 ;; 3 = Time in file friendly format: 113756 ;; Param2: ;; True = Use human-readable format: 15/01/2019 11:37:56 Local \$sTime = @HOUR & ":" & @MIN & ":" & @SEC Local \$sDate = @MDAY & "/" & @MON & "/" & @YEAR If \$iType = 1 Then If \$bHumanFormat = False Then \$sTime = StringReplace(\$sTime, ":", "") \$sDate = StringReplace(\$sDate, "/", "") \$sDate = StringTrimLeft(\$sDate, 4) & StringMid(\$sDate, 3, 2) & StringLeft(\$sDate, 2) Return (\$sDate & "_" & \$sTime) Else Return (\$sDate & " " & \$sTime) EndIf ElseIf \$iType = 2 Then If \$bHumanFormat = False Then \$sDate = StringReplace(\$sDate, "/", "") \$sDate = StringTrimLeft(\$sDate, 4) & StringMid(\$sDate, 3, 2) & StringLeft(\$sDate, 2) EndIf Return (\$sDate) ElseIf \$iType = 3 Then If \$bHumanFormat = False Then \$sTime = StringReplace(\$sTime, "/", "") EndIf Return (\$sTime) EndIf EndFunc ;==>_DateTimeGet ; #FUNCTION# ==================================================================================================================== ; Name ..........: _FileToFileExtension ; Description ...: Returns a file extension from a filename/FQPN (Fully Qualified Path Name) ; Syntax ........: _FileToFileExtension(\$sPath) ; Parameters ....: \$sPath - a string value. ; Return values .: Success - String ; Failure - Empty string as returned from StringTrimLeft() ; Author ........: Sam Coates ; =============================================================================================================================== Func _FileToFileExtension(\$sPath) Return (StringTrimLeft(\$sPath, StringInStr(\$sPath, ".", 0, -1))) EndFunc ;==>_FileToFileExtension ; #FUNCTION# ==================================================================================================================== ; Name ..........: _FileToFileName ; Description ...: Returns a filename from a FQPN (Fully Qualified Path Name) ; Syntax ........: _FileToFileName(\$sPath[, \$bIncludeExtension = True]) ; Parameters ....: \$sPath - a string value. ; \$bIncludeExtension - [optional] a boolean value. Default is True. ; Return values .: Success - String ; Failure - Empty string as returned from StringLeft() ; Author ........: Sam Coates ; =============================================================================================================================== Func _FileToFileName(\$sPath, \$bIncludeExtension = True) Local \$sReturn = StringTrimLeft(\$sPath, StringInStr(\$sPath, "\", 0, -1)) If \$bIncludeExtension = False Then \$sReturn = StringLeft(\$sReturn, StringInStr(\$sReturn, ".", 0, -1) - 1) Return (\$sReturn) EndFunc ;==>_FileToFileName ; #FUNCTION# ==================================================================================================================== ; Name ..........: _FileToFilePath ; Description ...: Returns a folder path from a FQPN (Fully Qualified Path Name) ; Syntax ........: _FileToFilePath(\$sPath) ; Parameters ....: \$sPath - a string value. ; Return values .: Success - String ; Failure - Empty string as returned from StringLeft() ; Author ........: Sam Coates ; =============================================================================================================================== Func _FileToFilePath(\$sPath) Return (StringLeft(\$sPath, StringInStr(\$sPath, "\", 0, -1) - 1)) EndFunc ;==>_FileToFilePath ; #FUNCTION# ==================================================================================================================== ; Name ..........: _StringLeft ; Description ...: Searches for a string inside a string, then removes everything on the right of that string ; Syntax ........: _StringLeft(\$sString, \$sRemove[, \$iCaseSense = 0, \$iOccurrence = 1]) ; Parameters ....: \$sString - a string value. The string to search inside. ; \$sRemove - a string value. The string to search for. ; \$iCaseSense - an integer value. Flag to indicate if the operations should be case sensitive. ; \$iOccurrence - an integer value. Which occurrence of the substring to find in the string. Use a ; negative occurrence to search from the right side. ; Return values .: Success - String ; Failure - Empty string as returned from StringLeft() ; Author ........: Sam Coates ; =============================================================================================================================== Func _StringLeft(\$sString, \$sRemove, \$iCaseSense = 0, \$iOccurrence = 1) Return (StringLeft(\$sString, StringInStr(\$sString, \$sRemove, \$iCaseSense, \$iOccurrence) - 1)) EndFunc ;==>_StringLeft ; #FUNCTION# ==================================================================================================================== ; Name ..........: _StringRandom ; Description ...: Returns a string of random characters ; Syntax ........: _StringRandom(\$iAmount[, \$iType = 1]) ; Parameters ....: \$iAmount - an integer value. Length of returned string ; \$iType - [optional] an integer value. Default is 1. ; 1 - Return digits (0-9) ; 2 - Return hexadecimal (0-9, A - F) ; 3 - Return Alphanumeric upper (0-9, A - Z) ; 4 - Return Alphanumeric (0-9, A - Z, a - z) ; 5 - Return Alpha upper (A - Z) ; 6 - Return Alpha (A - Z, a - z) ; Return values .: Success - String ; Failure - Empty string and @error flag as follows: ; @error : 1 - \$iAmount is not a positive integer ; 2 - \$iType is out of bounds ; Author ........: Sam Coates ; =============================================================================================================================== Func _StringRandom(\$iAmount, \$iType = 1) If \$iAmount < 1 Or IsInt(\$iAmount) = 0 Then Return (SetError(-1, 0, "")) Local \$sString = "" Local \$iRandomLow = 1, \$iRandomHigh = 62 #Tidy_Off Local Static \$aCharId[63] = [0, Chr(48), Chr(49), Chr(50), Chr(51), Chr(52), Chr(53), Chr(54), Chr(55), Chr(56), Chr(57), Chr(65), Chr(66), Chr(67), _ Chr(68), Chr(69), Chr(70), Chr(71), Chr(72), Chr(73), Chr(74), Chr(75), Chr(76), Chr(77), Chr(78), Chr(79), Chr(80), _ Chr(81), Chr(82), Chr(83), Chr(84), Chr(85), Chr(86), Chr(87), Chr(88), Chr(89), Chr(90), Chr(97), Chr(98), Chr(99), _ Chr(100), Chr(101), Chr(102), Chr(103), Chr(104), Chr(105), Chr(106), Chr(107), Chr(108), Chr(109), Chr(110), Chr(111), _ Chr(112), Chr(113), Chr(114), Chr(115), Chr(116), Chr(117), Chr(118), Chr(119), Chr(120), Chr(121), Chr(122)] #Tidy_On If \$iType = 1 Then ;; digits: 1 - 10 \$iRandomHigh = 10 ElseIf \$iType = 2 Then ;; hexadecimal: 1 - 16 \$iRandomHigh = 16 ElseIf \$iType = 3 Then ;; alnumupper: 1 - 36 \$iRandomHigh = 36 ElseIf \$iType = 4 Then ;; alnum: 1 - 62 \$iRandomHigh = 62 ElseIf \$iType = 5 Then ;; alphaupper: 11 - 36 \$iRandomLow = 11 \$iRandomHigh = 36 ElseIf \$iType = 6 Then ;; alpha: 11 = 62 \$iRandomLow = 11 \$iRandomHigh = 62 Else Return (SetError(-2, 0, "")) EndIf For \$i = 1 To \$iAmount \$sString &= \$aCharId[Random(\$iRandomLow, \$iRandomHigh, 1)] ;; append string with corresponding random character from ascii array Next Return (\$sString) EndFunc ;==>_StringRandom ; #FUNCTION# ==================================================================================================================== ; Name ..........: _StringTrimLeft ; Description ...: Searches for a string inside a string, then removes everything on the left of that string ; Syntax ........: _StringTrimLeft(\$sString, \$sRemove[, \$iCaseSense = 0, \$iOccurrence = 1]) ; Parameters ....: \$sString - a string value. The string to search inside. ; \$sRemove - a string value. The string to search for. ; \$iCaseSense - an integer value. Flag to indicate if the operations should be case sensitive. ; \$iOccurrence - an integer value. Which occurrence of the substring to find in the string. Use a ; negative occurrence to search from the right side. ; Return values .: Success - String ; Failure - Empty string as returned from StringTrimLeft() ; Author ........: Sam Coates ; =============================================================================================================================== Func _StringTrimLeft(\$sString, \$sRemove, \$iCaseSense = 0, \$iOccurrence = 1) Return (StringTrimLeft(\$sString, StringInStr(\$sString, \$sRemove, \$iCaseSense, \$iOccurrence) + StringLen(\$sRemove) - 1)) EndFunc ;==>_StringTrimLeft Examples:
ConsoleWrite(_StringRandom(100, 6) & @CRLF) ConsoleWrite(_StringTrimLeft("C:\Windows\System32\cmd.exe", "C:\Windows\System32\") & @CRLF) ConsoleWrite(_StringLeft("C:\Windows\System32\cmd.exe", "cmd.exe") & @CRLF) ConsoleWrite(_FileToFileName("C:\Windows\System32\cmd.exe") & @CRLF) ConsoleWrite(_FileToFilePath("C:\Windows\System32\cmd.exe") & @CRLF) ConsoleWrite(_FileToFileExtension("C:\Windows\System32\cmd.exe") & @CRLF) ConsoleWrite(_StringRandom(6, 4) & "-" & _StringRandom(4, 4) & "-" & _StringRandom(4, 4) & "-" & _StringRandom(4, 4) & "-" & _StringRandom(6, 4)& @CRLF)
• By Blitzkid
Hello, i want to search several directories for files with the largest numbers behind them (Like "video123") . They dont have a datatype. But there are also files with longer names and datatypes in these folders (Like "video778.mp4"). Is it possible to filter the _FileListToArray Syntax from
to smth. like

Here is my Code
#include <ButtonConstants.au3> #include <GUIConstantsEx.au3> #include <WindowsConstants.au3> #include <array.au3> #include <File.au3> \$filedir = @ScriptDir & "\" _checkfile() Func _checkfile() ConsoleWrite("______________________" & @CRLF) Local \$arr[3] = ["music", "picture", "video"] For \$i = 0 To UBound(\$arr) - 1 Local \$arrayfiles = _FileListToArray(\$filedir & \$arr[\$i], \$arr[\$i] & "*", 1) If @error = 1 Then ConsoleWrite(\$arr[\$i] & "Error 1") EndIf If @error = 4 Then ConsoleWrite(\$arr[\$i] & "Error 2") ;Exit EndIf \$arrayfilter = _ArrayMax(\$arrayfiles, 0, 1) Global \$stringfiles = StringReplace(\$arrayfilter, \$arr[\$i], "") ConsoleWrite(\$arrayfilter & @CRLF) Next EndFunc ;==>_checkfile
• By jmp
Script running good but error in line 7.
When i run this script :
#include <IE.au3> #include <Array.au3> \$oIE = _IEAttach ("Shop") \$oTable = _IETableGetCollection (\$oIE, 1) \$aTableData = _IETableWriteToArray (\$oTable) For \$inumber = 1 To UBound(\$aTableData) -1 \$table = \$aTableData[4][\$inumber] MsgBox(0, "", \$table) Next I got Error: array variable has incorrect number of subscripts or subscript dimension range exceeded

• good morning sirs.
please i have a request from you.
i have an variable to Read a data from a file
this data is Encrypted
and when i read it i Decrypte it.
for that i need a function to Write a ini data to string.
;#Function# ===================================================================================================================== ; Name............: _IniReadFromString ; Description.....: Returns the value of a key in a specific section of an ini-formatted string ; Syntax..........: _IniReadFromString(\$szInput, \$szSection, \$szKey, \$Default) ; Parameters......: ;   \$szInput - The string that contains data in ini format ;   \$szSection   - The sectionname (just as in IniRead) ;   \$szKey   - The keyname (just as in IniRead) ;   \$Default - The default value if the key does not exist or reading failed (just as in IniRead) ; Return values ..: ;   Success  - Returns the read value ;   Failure  - Returns \$Default ; Author .........: FichteFoll ; Remarks ........: Works for Unicode as well as for ANSI ; Related ........: IniRead, _IniReadSectionFromString ; Link ...........; See on top ; Example ........; \$var = _IniReadFromString(StringFormat("[Sect]\r\nMyKey1=value1\r\nMyKey2=value2"), "Sect", "MyKey2", "no_value") ; =============================================================================================================================== Func _IniReadFromString(\$szInput, \$szSection, \$szKey, \$Default) \$szInput = StringStripCR(\$szInput) ;~  Local \$aRegMl = StringRegExp(\$szInput, "\[" & __StringEscapeRegExp(\$szSection) & "\]\n+(?:[^\[].*?=.*\n)*" & __StringEscapeRegExp(\$szKey) & "=(.*)\n?(",3) Local \$aRegMl = StringRegExp(\$szInput, "\[" & __StringEscapeRegExp(\$szSection) & "\]\n+(?:[^\[].*?=.*\n)*" & __StringEscapeRegExp(\$szKey) & "=(.*)\n?", 3) If @error Then Return SetError(1, 0, \$Default) ; key not found    Return \$aRegMl[0] EndFunc;==>_IniReadFromString ; ############################################################################################################################### ; =============================================== ; = Internal Use Only ; =============================================== Func __StringEscapeRegExp(\$szExp) Return StringRegExpReplace(\$szExp, "([\(\)\[\]\{\}\\\/\?\.\\|\+])", "\\\$1") ; ()[]{}\/?.|+ EndFunc;==>__StringEscapeRegExp like this  function Read the ini from string.

please ihelp me
thanks in advance

• Good morning guys, i hope that you're all well.
guys, i have a problem and i hope that you can help me
i've created an 3d array
the array Contain a Categories info
as folow
\$array[n][0][0] = Categorie name
\$array[n][0][1] = Categorie file path
\$array[n][0][2] = Categorie contents number
\$array[n][m][0] = link name
\$array[n][m][1] = link url
\$array[n][m][2] = link section name
in my tool i want to add an option to delete a Category
as you know the Categorie mean that must delete a region from the array
when i tried to use _arrayDelete
with the 2d array it work well
but here i couldn't find any way to do that, can any one help me please?
thanks in advance.
×

• Wiki

• Back

• #### Beta

• Git
• FAQ
• Our Picks
×
• Create New...