Opened 17 years ago
Closed 17 years ago
#294 closed Bug (Fixed)
Fix for _FileFreadToArray()
| Reported by: | GEOSoft | Owned by: | Gary |
|---|---|---|---|
| Milestone: | 3.2.13.0 | Component: | AutoIt |
| Version: | 3.2.12.0 | Severity: | None |
| Keywords: | File.au3 | Cc: |
Description
Fixes the situation where the file contains no @LF
NOTE: This also includes my version with a default value for $aArray, Reason= It can be called without pre-declaring the array. You just need $MyArray = _FileReadToArray("My\File\Path.ext") My feelings won't be hurt if that's removed.
Func _FileReadToArray($sFilePath, $aArray = "")
Local $hFile
$hFile = FileOpen($sFilePath, 0)
If $hFile = -1 Then ;; unable to open the file
SetError(1)
Return 0
EndIf
$aFile = FileRead($hFile, FileGetSize($sFilePath));; Read the file and remove trailing white spaces
$aFile = StringStripWS($aFile, 2)
FileClose($hFile)
If StringInStr($aFile, @LF) Then
$aArray = StringSplit( StringStripCR($aFile), @LF)
ElseIf StringInStr($aFile, @CR) Then ;; @LF does not exist so split on the @CR
$aArray = StringSplit( $aFile, @CR)
Else ;; unable to split the file
SetError(1)
Return 0
EndIf
Return $aArray
EndFunc ;<==> _FileReadToArray()
Attachments (0)
Change History (6)
comment:1 follow-up: ↓ 2 Changed 17 years ago by Gary
- Severity set to None
comment:2 in reply to: ↑ 1 Changed 17 years ago by GEOSoft
Replying to Gary:
Fails on files that contain CRLF.
For example use @ScriptFullPath as the file to parse.
I'll test it again. It can probably be solved by changing
If StringInStr($aFile, @LF)
to
If StringInStr($aFile, @CRLF)
comment:3 Changed 17 years ago by GEOSoft
That wasn't the problem. In order to keep it backwards compatable I had to add the ByRef back in which means that the array has to be pre-declared again. Wish we could fix that issue). This works.
Func _FileReadToArray($sFilePath, ByRef $aArray)
Local $hFile, $aFile
$hFile = FileOpen($sFilePath, 0)
If $hFile = -1 Then ;; unable to open the file
SetError(1)
Return 0
EndIf
;; Read the file and remove any trailing white spaces
$aFile = FileRead($hFile, FileGetSize($sFilePath))
$aFile = StringStripWS($aFile, 2)
FileClose($hFile)
If StringInStr($aFile, @LF) Then
$aArray = StringSplit( StringStripCR($aFile), @LF)
ElseIf StringInStr($aFile, @CR) Then ;; @LF does not exist so split on the @CR
$aArray = StringSplit( $aFile, @CR)
Else ;; unable to split the file
SetError(1)
Return 0
EndIf
Return $aArray
EndFunc ;<==> _FileReadToArray()
If I ignore backwards compatability then the origional fix is fine
Just call it using
$Test = _FileReadToArray(@ScriptFullPath) If IsArray($Test) Then MsgBox(0, "TEST", Ubound($Test)-1)
That's the way I use my version but it's not backwards compatable for others.
comment:4 follow-up: ↓ 5 Changed 17 years ago by Valik
George, why not just do something like this in your own files somewhere?
#include <File.au3>
Func _FileReadToArray2($sFilePath)
Local $a
_FileReadToArray($sFilePath, $a)
SetError(@error, @extended)
Return $a
EndFunc
comment:5 in reply to: ↑ 4 Changed 17 years ago by GeoSoft
Replying to Valik:
George, why not just do something like this in your own files somewhere?
#include <File.au3> Func _FileReadToArray2($sFilePath) Local $a _FileReadToArray($sFilePath, $a) SetError(@error, @extended) Return $a EndFunc
That would work as well. The way I have it now is I have a file named Arrayx.au3 which I #include and the function is actually FileReadToArray() with the 2 underscores so that works. I really think it would have been better if Jon had left the ByRef out of the first version but it's too late for that now I think.
comment:6 Changed 17 years ago by Gary
- Milestone set to 3.2.13.0
- Owner set to Gary
- Resolution set to Fixed
- Status changed from new to closed
Fixed in version: 3.2.13.0
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.

Fails on files that contain CRLF.
For example use @ScriptFullPath as the file to parse.