fraizor Posted April 22, 2024 Posted April 22, 2024 (edited) Hello Everyone I have a strange issue ... The json generated array is not getting sorted properly for some reason #include <json.au3> #include <Array.au3> Dim $Chart[0][2] ; Array size of 2 columns $object = json_decode(FileRead("Test.json")) ;for local testing $Coins = json_get($object, '.data') for $i = 0 to UBound($Coins) -1 $name = json_get($object, '.data[' & $i & '].name' ) $change_1h = json_get($object, '.data[' & $i & '].quote.USD.percent_change_1h') _ArrayAdd($Chart,$name & "|" & number($change_1h,3) ) Next _ArraySort($Chart, 1, Default, Default, 1) _ArrayDisplay($Chart) _ArraySort is sorting the array like this (wrong): However if i click on the "Col 1" header it will be sorted correctly: How can i make _ArraySort sort them like clicking on "Col 1" does ? PS: i tried using the function "Number()" when i add the value to the array , but same result .. Thanks in advance Test.json Edited April 22, 2024 by fraizor AutoFox, A Modern, Simple, No dependency, Noob friendly yet powerful Firefox UDF !
Solution water Posted April 22, 2024 Solution Posted April 22, 2024 This code returns a String as AutoIt internally converts your number to a String again to be able to concatenate them. $name & "|" & number($change_1h,3) Call _ArrayAdd twice to fill the two columns. See the help file for details: "String datatype elements are sorted alphabetically and number datatype elements are sorted numerically - it is important to ensure that elements are of the correct datatype before sorting." fraizor 1 My UDFs and Tutorials: Spoiler UDFs: Active Directory (NEW 2024-07-28 - Version 1.6.3.0) - Download - General Help & Support - Example Scripts - Wiki ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts OutlookEX (2021-11-16 - Version 1.7.0.0) - Download - General Help & Support - Example Scripts - Wiki OutlookEX_GUI (2021-04-13 - Version 1.4.0.0) - Download Outlook Tools (2019-07-22 - Version 0.6.0.0) - Download - General Help & Support - Wiki PowerPoint (2021-08-31 - Version 1.5.0.0) - Download - General Help & Support - Example Scripts - Wiki Task Scheduler (2022-07-28 - Version 1.6.0.1) - Download - General Help & Support - Wiki Standard UDFs: Excel - Example Scripts - Wiki Word - Wiki Tutorials: ADO - Wiki WebDriver - Wiki
fraizor Posted April 22, 2024 Author Posted April 22, 2024 4 minutes ago, water said: This code returns a String as AutoIt internally converts your number to a String again to be able to concatenate them. $name & "|" & number($change_1h,3) Call _ArrayAdd twice to fill the two columns. See the help file for details: "String datatype elements are sorted alphabetically and number datatype elements are sorted numerically - it is important to ensure that elements are of the correct datatype before sorting." @waterThank you for your response i tried to Call _ArrayAdd twice, but it created spaces in the array ... _ArrayAdd($Chart,$name) _ArrayAdd($Chart, $change_1h,1 ) Still after adding each value alone it is still not sorting properly .. AutoFox, A Modern, Simple, No dependency, Noob friendly yet powerful Firefox UDF !
ioa747 Posted April 22, 2024 Posted April 22, 2024 (edited) #include "json.au3" #include <Array.au3> Dim $Chart[0][5] ; Array size of 2 columns $object = json_decode(FileRead("Test.json")) ;for local testing $Coins = json_get($object, '.data') for $i = 0 to UBound($Coins) -1 $name = json_get($object, '.data[' & $i & '].name' ) $change_1h = json_get($object, '.data[' & $i & '].quote.USD.percent_change_1h') _ArrayAdd($Chart,$name & "|" & number($change_1h,3) ) $Chart[$i][2] = VarGetType ( $Chart[$i][1] ) $Chart[$i][3] = number($change_1h,3) $Chart[$i][4] = VarGetType ( $Chart[$i][3] ) Next _ArraySort($Chart, 1, Default, Default, 3) _ArrayDisplay($Chart) Edited April 22, 2024 by ioa747 corection _ArraySort($Chart, 1, Default, Default, 3) fraizor 1 I know that I know nothing
water Posted April 22, 2024 Posted April 22, 2024 I see. Then I suggest: Global $iRow ; Loop starts here $iRow = _ArrayAdd($Chart,$name) $Chart[$iRow][1] = number($change_1h,3) fraizor 1 My UDFs and Tutorials: Spoiler UDFs: Active Directory (NEW 2024-07-28 - Version 1.6.3.0) - Download - General Help & Support - Example Scripts - Wiki ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts OutlookEX (2021-11-16 - Version 1.7.0.0) - Download - General Help & Support - Example Scripts - Wiki OutlookEX_GUI (2021-04-13 - Version 1.4.0.0) - Download Outlook Tools (2019-07-22 - Version 0.6.0.0) - Download - General Help & Support - Wiki PowerPoint (2021-08-31 - Version 1.5.0.0) - Download - General Help & Support - Example Scripts - Wiki Task Scheduler (2022-07-28 - Version 1.6.0.1) - Download - General Help & Support - Wiki Standard UDFs: Excel - Example Scripts - Wiki Word - Wiki Tutorials: ADO - Wiki WebDriver - Wiki
fraizor Posted April 22, 2024 Author Posted April 22, 2024 Amazing thank you @water thank you @ioa747 AutoFox, A Modern, Simple, No dependency, Noob friendly yet powerful Firefox UDF !
Nine Posted April 22, 2024 Posted April 22, 2024 Streamlined : #include "C:\Apps\AutoIt\JSON\json.au3" #include <Array.au3> $object = json_decode(FileRead("Test.json")) ;for local testing $Coins = json_get($object, '.data') Local $Chart[UBound($Coins)][2] for $i = 0 to UBound($Coins) -1 $Chart[$i][0] = json_get($object, '.data[' & $i & '].name' ) $Chart[$i][1] = Number(json_get($object, '.data[' & $i & '].quote.USD.percent_change_1h'), 3) Next _ArraySort($Chart, 3, Default, Default, 1) _ArrayDisplay($Chart) fraizor 1 “They did not know it was impossible, so they did it” ― Mark Twain Spoiler Block all input without UAC Save/Retrieve Images to/from Text Monitor Management (VCP commands) Tool to search in text (au3) files Date Range Picker Virtual Desktop Manager Sudoku Game 2020 Overlapped Named Pipe IPC HotString 2.0 - Hot keys with string x64 Bitwise Operations Multi-keyboards HotKeySet Recursive Array Display Fast and simple WCD IPC Multiple Folders Selector Printer Manager GIF Animation (cached) Debug Messages Monitor UDF Screen Scraping Round Corner GUI UDF Multi-Threading Made Easy Interface Object based on Tag
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now