Opened 16 years ago
Closed 16 years ago
#603 closed Bug (Fixed)
_FileReadToArray() does not return an array if the file contains only a single line of text.
Reported by: | Bowmore | Owned by: | Gary |
---|---|---|---|
Milestone: | 3.2.13.9 | Component: | Standard UDFs |
Version: | 3.2.13.8 | Severity: | None |
Keywords: | Cc: |
Description
In AutoIt 3.2.13.8 and previous beta versions _FileReadToArray() does not return an array if the file contains only a single line of text.
It does return an array in the Production version 3.2.12.1 of AutoIt
Test script to demonstrate behaviour in current beta
#include <file.au3> #include <array.au3> Global $g_sFileName = '' Global $g_aFile = 0 Global $g_iStatus = 0 Global $g_sMessage = '' ;_FileReadToArray does not return array if file contains only 1 line of text $g_sFileName = "C:\Data\TestFile_1.txt" $g_iStatus = _FileReadToArray($g_sFileName, $g_aFile) $g_sMessage = "@error " & @TAB & " = " & @error & @CRLF $g_sMessage &= "$g_sFileName" & @TAB & " = " & $g_sFileName & @CRLF $g_sMessage &= "$g_aFile " & @TAB & " = " & $g_aFile & @CRLF $g_sMessage &= "$g_iStatus " & @TAB & " = " & $g_iStatus MsgBox(0, "Bug Test", $g_sMessage) _ArrayDisplay($g_aFile) ;_FileReadToArray does returns array if file contains more than 1 line of text $g_sFileName = "C:\Data\TestFile_2.txt" $g_aFile = 0 $g_iStatus = _FileReadToArray($g_sFileName, $g_aFile) $g_sMessage = "@error " & @TAB & " = " & @error & @CRLF $g_sMessage &= "$g_sFileName" & @TAB & " = " & $g_sFileName & @CRLF $g_sMessage &= "$g_aFile " & @TAB & " = " & $g_aFile & @CRLF $g_sMessage &= "$g_iStatus " & @TAB & " = " & $g_iStatus MsgBox(0, "Bug Test", $g_sMessage) _ArrayDisplay($g_aFile)
Attachments (2)
Change History (4)
Changed 16 years ago by Bowmore
comment:1 Changed 16 years ago by Bowmore
I have had another look at _FileReadToArray() and I now see what the problem is. With a single line file, which may or may not have a trailing new-line character, the function strips trailing whitespace before checking what type of new-line character is use. This results in no recognised new-line character being found in the file. This should be changed so that the type of new-line character is determined before the trailing whitespace is removed. Additionally I think it would be better if the whole file contents were returned in a single element of the array if the string could not be split
Suggested fix for this issue
Func _FileReadToArray($sFilePath, ByRef $aArray) Local $hFile = 0 Local $aFile = '' Local $sSplitChr = '' $hFile = FileOpen($sFilePath, 0) If $hFile = -1 Then Return SetError(1, 0, 0);; unable to open the file ;; Read the file $aFile = FileRead($hFile, FileGetSize($sFilePath)) FileClose($hFile) If StringInStr($aFile, @LF) Then $sSplitChr = @LF StringStripCR($aFile) ElseIf StringInStr($aFile, @CR) Then ;;@LF does not exist so split on @CR $sSplitChr = @CR EndIf ;; Remove any trailing white spaces $aFile = StringStripWS($aFile, 2) If StringLen($aFile) = 0 Then ;; File is empty Return SetError(3, 0, 0) ElseIf $sSplitChr == '' Then ;; unable to split the file ;; store in single element Dim $aArray[2] $aArray[0] = 1 $aArray[1] = $aFile Return SetError(2, 0, 0) Else $aArray = StringSplit($aFile, $sSplitChr) EndIf Return 1 EndFunc ;==>_FileReadToArray
comment:2 Changed 16 years ago by Gary
- Milestone set to 3.2.13.9
- Resolution set to Fixed
- Status changed from new to closed
Fixed in version: 3.2.13.9
Guidelines for posting comments:
- You cannot re-open a ticket but you may still leave a comment if you have additional information to add.
- In-depth discussions should take place on the forum.
For more information see the full version of the ticket guidelines here.
File with single line of text