Skeletor Posted October 17, 2018 Posted October 17, 2018 Hi Virtual People, My array works perfectly fine. However, what is the best practice if the line in the array doesn't have the correct amount of columns and if I can add a placeholder? For $count = 1 To _FileCountLines($FileRead1) Step 1 $string = FileReadLine($FileRead1, $count) $input = StringSplit($string, ",", 1) $value1 = $input[1] $value2 = $input[2] $value3 = $input[3] _Excel_RangeWrite($oWorkbook, $oWorkbook.Activesheet, $value2, "A1") _Excel_RangeWrite($oWorkbook, $oWorkbook.Activesheet, $value1, "B1") _Excel_RangeWrite($oWorkbook, $oWorkbook.Activesheet, $value3, "C1") Next Kind RegardsSkeletor "Coffee: my defense against going postal." Microsoft Office Splash Screen | Basic Notepad Program (Beginner) | Transparent Splash Screen | Full Screen UI
caramen Posted October 17, 2018 Posted October 17, 2018 (edited) Try that : Local $MyVar[3] = ["element 1", "element 2", "element 3"] MsgBox (0, "", $MyVar) MsgBox (0, "", $MyVar[0]) MsgBox (0, "", $MyVar[1]) MsgBox (0, "", $MyVar[2]) ;This is equal to $iRow amount (3) - 1 = 2 $iRow = UBound ($MyVar) MsgBox (0, "", $iRow) If $iRow > 3 Then ; With that you dodged the fact to trying to access an non accessible $Variable. in this case it was $MyVar[3] MsgBox (0, "", $MyVar[$iRow-4]);$MyVar[3] MsgBox (0, "", $MyVar[$iRow-3]);$MyVar[2] MsgBox (0, "", $MyVar[$iRow-2]);$MyVar[1] MsgBox (0, "", $MyVar[$iRow-1]);$MyVar[0] EndIf If $iRow > 2 Then MsgBox (0, "", $MyVar[$iRow-3]);$MyVar[2] MsgBox (0, "", $MyVar[$iRow-2]);$MyVar[1] MsgBox (0, "", $MyVar[$iRow-1]);$MyVar[0] EndIf If $iRow > 1 Then MsgBox (0, "", $MyVar[$iRow-2]);$MyVar[1] MsgBox (0, "", $MyVar[$iRow-1]);$MyVar[0] EndIF If $iRow > 0 Then MsgBox (0, "", $MyVar[$iRow-1]) ;$MyVar[0] EndIf Read help file about : UBound IsArray Edited October 17, 2018 by caramen Skeletor 1 My video tutorials : ( In construction ) || My Discord : https://discord.gg/S9AnwHw How to Ask Help || UIAutomation From Junkew || WebDriver From Danp2 || And Water's UDFs in the Quote Spoiler Water's UDFs:Active Directory (NEW 2018-10-19 - Version 1.4.10.0) - Download - General Help & Support - Example Scripts - WikiOutlookEX (2018-10-31 - Version 1.3.4.1) - Download - General Help & Support - Example Scripts - WikiExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example ScriptsPowerPoint (2017-06-06 - Version 0.0.5.0) - Download - General Help & SupportExcel - Example Scripts - WikiWord - Wiki Tutorials:ADO - Wiki
Skeletor Posted October 17, 2018 Author Posted October 17, 2018 Thank you caramen... the IsArray was what I was looking for . Kind RegardsSkeletor "Coffee: my defense against going postal." Microsoft Office Splash Screen | Basic Notepad Program (Beginner) | Transparent Splash Screen | Full Screen UI
FrancescoDiMuro Posted October 17, 2018 Posted October 17, 2018 (edited) @Skeletor If you allow me, IsArray() doesn't tell you if you have less elements in your array and/or you array has some blank elements. So, if you want to see if your array has less elements than the "normal", or has some blank elements, then you should do something like this: #include <Array.au3> Global $strIsArray = "Element1,Element2,ElementN", _ $strLessElements = "Element1,Element2", _ $strBlankElement = "Element1,,ElementN", _ $arrIsArray = StringSplit($strIsArray, ",", $STR_NOCOUNT), _ $arrLessElements = StringSplit($strLessElements, ",", $STR_NOCOUNT), _ $arrBlankElements = StringSplit($strBlankElement, ",", $STR_NOCOUNT), _ $varNotAnArray _ArrayDisplay($arrIsArray) _ArrayDisplay($arrLessElements) _ArrayDisplay($arrBlankElements) ; To detect if the array has less elements than normal, use UBound() If UBound($arrIsArray) < UBound($arrLessElements) Then ConsoleWrite("$arrLessElements has elements than $arrIsArray." & @CRLF) EndIf ; To detect if the array has a blank element For $i = 0 To UBound($arrBlankElements) - 1 Step 1 If $arrBlankElements[$i] = "" Then ConsoleWrite("Detected a blank element at the index '" & $i & "'." & @CRLF) Next ; As you can see from here, only $varNotAnArray, which is not an array, displays "False" as a result of IsArray() function ConsoleWrite("Is $arrIsArray an array? " & (IsArray($arrIsArray) ? "True" : "False") & @CRLF & _ ; True "Is $arrLessElements an array? " & (IsArray($arrLessElements) ? "True" : "False") & @CRLF & _ ; True "Is $arrBlankElements an array? " & (IsArray($arrBlankElements) ? "True" : "False") & @CRLF & _ ; True "Is $varNotAnArray an array? " & (IsArray($varNotAnArray) ? "True" : "False") & @CRLF) ; False Edited October 17, 2018 by FrancescoDiMuro Skeletor 1 Click here to see my signature: Spoiler ALWAYS GOOD TO READ: Forum Rules Forum Etiquette
caramen Posted October 17, 2018 Posted October 17, 2018 (edited) @FrancescoDiMuro Loved that one. Edited October 17, 2018 by caramen Skeletor 1 My video tutorials : ( In construction ) || My Discord : https://discord.gg/S9AnwHw How to Ask Help || UIAutomation From Junkew || WebDriver From Danp2 || And Water's UDFs in the Quote Spoiler Water's UDFs:Active Directory (NEW 2018-10-19 - Version 1.4.10.0) - Download - General Help & Support - Example Scripts - WikiOutlookEX (2018-10-31 - Version 1.3.4.1) - Download - General Help & Support - Example Scripts - WikiExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example ScriptsPowerPoint (2017-06-06 - Version 0.0.5.0) - Download - General Help & SupportExcel - Example Scripts - WikiWord - Wiki Tutorials:ADO - Wiki
Subz Posted October 17, 2018 Posted October 17, 2018 StringSplit always returns an array, even if you use a blank line, see example below, personally I would just use the line count like in the example below or use Ubound as FrancescoDiMuro used. #include <Array.au3> Local $aArray, $aString[] = ["One,Two,Three", "", "Four,Five,Six,Seven,Eight","Nine,Ten"] For $i = 0 To UBound($aString) - 1 $aArray = StringSplit($aString[$i], ",") ;~ Check string has been split into three or more items If $aArray[0] >= 3 Then MsgBox(4096, "Success", "String has successfully been split into " & $aArray[0] & " line items.") Else MsgBox(16, "Failure", "String has been split into " & $aArray[0] & " line items.") EndIf _ArrayDisplay($aArray) Next Skeletor 1
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