DXRW4E Posted January 11, 2014 Share Posted January 11, 2014 (edited) expandcollapse popup; #CONSTANTS# ==================================================== #Region ;**** Global vars for _FileReadToArrayEx Global Const $FRTA_NOCOUNT = 1 Global Const $FRTA_ARRAYFIELD = 2 Global Const $FRTA_STRIPLEADING = 4 Global Const $FRTA_STRIPTRAILING = 8 Global Const $FRTA_STRIPLINEEMPTY = 16 Global Const $FRTA_CHECKSINGEQUOTE = 32 Global Const $FRTA_STRIP_TRAILINGLEADING = BitOR($FRTA_STRIPLEADING, $FRTA_STRIPTRAILING) ;INTERNALLY USE ONLY Global Const $FRTA_STRIPALL = BitOR($FRTA_STRIPLEADING, $FRTA_STRIPTRAILING, $FRTA_STRIPLINEEMPTY) #EndRegion ;**** Global vars for _FileReadToArrayEx ; ================================================================ ; #FUNCTION# ==================================================================================================================== ; Name...........: _FileReadToArrayEx ; Description ...: Reads the specified file into an array. ; Parameters ....: $sFilePath - Path and filename of the file to be read. ; $sDelim - Optional, Fiels separator character, Default is ',', This parameter can not be '"' or "'" or ';' or Whitespace character ; $iFlags - Optional, Flag to indicate the type of stripping that should be performed (add the flags together for multiple operations) ; | Default (0) - Return All line)s and set array count in the 0th index ; |$FRTA_NOCOUNT (1) - Don't return the array count ; |$FRTA_ARRAYFIELD (2) - Array field Mod ; |$FRTA_STRIPLEADING (4) - Strip Line leading white space ; |$FRTA_STRIPTRAILING (8) - Strip Line trailing white space ; |$FRTA_STRIPLINEEMPTY (16) - Don't return Line empty (ignores @CRLF & @CRLF & @CRLF ect ect) ; |$FRTA_CHECKSINGEQUOTE (64) - Check also Single Quote "'" for compatibility with AU3 file, Default check Double Quote only ; This Flags will be ignored if the $FRTA_ARRAYFIELD is not set\used, ; Return values .: If the function succeeds, it returns Array (Check @extended for array count); otherwise, 0. ; @error - 0 = No error ; |1 = File does not exist (or has not $GENERIC_READ Security Access Rights) or No line\fiels found ; Author ........: DXRW4E ; =============================================================================================================================== Func _FileReadToArrayEx($sFilePath, $sDelim = "", $iFlags = 0) If BitAND($iFlags, $FRTA_ARRAYFIELD) Then Local $sData = StringTrimLeft(StringTrimRight(StringRegExpReplace(@LF & FileRead($sFilePath) & @LF, "[\s\x0]*[\r\n][\s\x0]*+", @LF), 1), 1) If Not $sData Then Return SetError(1, 0, 0) If Not $sDelim Then $sDelim = "," If BitAND($iFlags, $FRTA_CHECKSINGEQUOTE) Then $sData = StringRegExpReplace($sData, "(?:[^" & $sDelim & '\s"''\x0]+|''[^'']*''|"[^"]*"|[\h\f\xb\x0]*+(?!\n|' & $sDelim & "))*+\K[\h\f\xb\x0]*+" & $sDelim & "[\h\f\xb\x0]*+", @CR) Else $sData = StringRegExpReplace($sData, "(?:[^" & $sDelim & '\s"\x0]+|"[^"]*"|[\h\f\xb\x0]*+(?!\n|' & $sDelim & "))*+\K[\h\f\xb\x0]*+" & $sDelim & "[\h\f\xb\x0]*+", @CR) EndIf Local $STR_COUNT = (BitAND($iFlags, $FRTA_NOCOUNT) ? 3 : 1) $sData = StringSplit($sData, @LF, $STR_COUNT) Local $iaData = ($STR_COUNT = 1 ? $sData[0] : UBound($sData) - 1), $_iaData = ($STR_COUNT = 1 ? 1 : 0) For $i = $_iaData To $iaData $sData[$i] = StringSplit($sData[$i], @CR, $STR_COUNT) Next Return SetError(0, $iaData, $sData) Else Local $iCount = 0, $sData = BitAND($iFlags, $FRTA_NOCOUNT) ? FileRead($sFilePath) : "0" & @LF & FileRead($sFilePath) If Not BitAND($iFlags, $FRTA_STRIPALL) Then $sData = StringRegExp($sData, "(?s)([^\r\n]*+)\r?+\n?+", 3) ElseIf BitAND($iFlags, $FRTA_STRIPALL) = $FRTA_STRIPALL Then $sData = StringRegExp($sData, "(?s)[\s\x0]*+((?:[^\s\x0]+|[\h\f\xb\x0]*+(?![\r\n]|$))+)[\s\x0]*+", 3) Else $sData = StringRegExp($sData, (BitAND($iFlags, $FRTA_STRIPLINEEMPTY) ? "(?s)[\r\n]*+" : "(?s)") & (BitAND($iFlags, $FRTA_STRIPLEADING) ? "[\h\f\xb\x0]*+" : "") & (BitAND($iFlags, $FRTA_STRIPTRAILING) ? "((?:[^\s\x0]+|[\h\f\xb\x0]*+(?![\r\n]|$))*+)[\h\f\xb\x0]*+" : "([^\r\n]*+)") & (BitAND($iFlags, $FRTA_STRIPLINEEMPTY) ? "[\r\n]*+" : ""), 3) EndIf If @Error Then Return SetError(1, 0, 0) $iCount = UBound($sData) If Not BitAND($iFlags, $FRTA_NOCOUNT) Then $sData[0] = $iCount - 1 Return SetError(0, $iCount, $sData) EndIf EndFunc ;==>_FileReadToArrayEx #include <Array.au3> #include "_FileReadToArrayEx.au3" FileDelete(@DesktopDir & '\Test.inf') Local $sData, $aArray, $fTimerDiff For $i = 1 to 50000 $sData &= "Line - " & $i & ', "1 , , , ",2 ,'',,,3'',4 ,5 ' & @CRLF Next $sData &= @CRLF & @CRLF & " " & @CRLF & @CRLF & " " & @CRLF For $i = 1 to 50000 $sData &= "Line - " & $i & ", 1,2,3,4,5,6,7,8,9,10" & @CRLF Next FileWrite(@DesktopDir & '\Test.inf', $sData) Local $aArray $fTimerDiff = TimerInit() $aArray = _FileReadToArrayEx(@DesktopDir & '\Test.inf') $fTimerDiff = TimerDiff($fTimerDiff) ConsoleWrite("_FileReadToArrayEx() : " & $fTimerDiff & @CRLF) _ArrayDisplay($aArray) $fTimerDiff = TimerInit() $aArray = _FileReadToArrayEx(@DesktopDir & '\Test.inf', ",", $FRTA_ARRAYFIELD + $FRTA_STRIPALL + $FRTA_CHECKSINGEQUOTE) $fTimerDiff = TimerDiff($fTimerDiff) ConsoleWrite("_FileReadToArrayEx() : " & $fTimerDiff & @CRLF) _ArrayDisplay($aArray) _ArrayDisplay(($aArray[1])) _ArrayDisplay(($aArray[50055]))Example, how to read in the loop ArrayField mod, or read arrays of arrays, this is normally done Thanks to the Array access on expression expandcollapse popup#include "_FileReadToArrayEx.au3" Local $sData, $aArray, $fTimerDiff FileDelete(@DesktopDir & '\Test.inf') For $i = 1 to 1000 $sData &= "Line - " & $i & ', "1 , , , ",2 ,'',,,3'',4 ,5 ' & @CRLF Next $sData &= @CRLF & @CRLF & " " & @CRLF & @CRLF & " " & @CRLF For $i = 1 to 1000 $sData &= "Line - " & $i & ", 1,2,3,4,5,6,7,8,9,10" & @CRLF Next FileWrite(@DesktopDir & '\Test.inf', $sData) $aArray = _FileReadToArrayEx(@DesktopDir & '\Test.inf', ",", BitOR($FRTA_ARRAYFIELD, $FRTA_STRIPALL)) If Not @Error Then For $i = 1 To $aArray[0] For $y = 1 To ($aArray[$i])[0] $sData &= ($aArray[$i])[$y] & "," Next $sData = StringTrimRight($sData, 1) & @CRLF Next EndIf ConsoleWrite($sData & @LF) $sData = '' $aArray = _FileReadToArrayEx(@DesktopDir & '\Test.inf', ",", BitOR($FRTA_NOCOUNT, $FRTA_ARRAYFIELD, $FRTA_STRIPALL)) If Not @Error Then ;;Local $iaArray = UBound($aArray) - 1 ; or $iaArray = @Extended For $i = 0 To UBound($aArray) - 1 For $y = 0 To UBound($aArray[$i]) - 1 $sData &= ($aArray[$i])[$y] & "," Next $sData = StringTrimRight($sData, 1) & @CRLF Next EndIf ConsoleWrite($sData & @LF) MsgBox(0, ($aArray[1])[0],($aArray[1])[1])Ciao. _FileReadToArrayEx.au3 Edited January 12, 2014 by DXRW4E Link to comment Share on other sites More sharing options...
GrowBigTrees Posted January 15, 2014 Share Posted January 15, 2014 Hi DXRW4E, there are ? characters in the code: Line 43: Local $STR_COUNT = (BitAND($iFlags, $FRTA_NOCOUNT) ? 3 : 1 same on lines 45, 51, 57 Can you repost ? Link to comment Share on other sites More sharing options...
Moderators Melba23 Posted January 15, 2014 Moderators Share Posted January 15, 2014 GrowBigTrees,Those are part of the ternary operator syntax - you need to upgrade to 3.3.10.2. M23 Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind Open spoiler to see my UDFs: Spoiler ArrayMultiColSort ---- Sort arrays on multiple columnsChooseFileFolder ---- Single and multiple selections from specified path treeview listingDate_Time_Convert -- Easily convert date/time formats, including the language usedExtMsgBox --------- A highly customisable replacement for MsgBoxGUIExtender -------- Extend and retract multiple sections within a GUIGUIFrame ---------- Subdivide GUIs into many adjustable framesGUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView itemsGUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeViewMarquee ----------- Scrolling tickertape GUIsNoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxesNotify ------------- Small notifications on the edge of the displayScrollbars ----------Automatically sized scrollbars with a single commandStringSize ---------- Automatically size controls to fit textToast -------------- Small GUIs which pop out of the notification area Link to comment Share on other sites More sharing options...
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