Creat0R
Цитата:
Так вроде правильнее:
Если в файл добавить следущую комбинацию:
Код:
Код: Выделить всё
$file = FileOpen("test.txt",2)
FileWrite($file,"" & @CRLF)
FileWrite($file,"" & @CRLF)
FileWrite($file,"" & @CRLF)
То твоя функция возвращает массив из 7 пустых строк, хотя на самом деле строк 4.
Необходимо учитывать все возможные типы завершения строк, как я уже сказал, всего их 3. (...правда, редактор "Notepad.exe" об этом не знает.)
Если автор UDF-функции упустил из виду @CR - то ты, в данном случае проигнорировал @CRLF.
Опишу всё подробно:
Код:
Код: Выделить всё
$hFile = FileOpen("test.txt", 0)
$text = FileRead($hFile)
$text = StringRegExpReplace($text,"\r\n",@LF) ; заменяем все комбинации @CRLF на @LF
$text = StringRegExpReplace($text,"\r",@LF) ; заменяем все оставшиеся @CR на @LF
; И теперь, когда мы точно уверены что все строки завершаются только символом @LF - делим текст:
$aArray = StringSplit($text,@LF)
;~ Иными словами, всё это можно реализовать так:
Код:
Код: Выделить всё
$hFile = FileOpen("test.txt", 0)
$aArray = StringSplit(StringRegExpReplace(FileRead($hFile),"\r\n|\r", @LF), @LF)
А сама функция должна выглядеть так:
Код:
Код: Выделить всё
Func _FileReadToArray($sFilePath, ByRef $aArray)
;==============================================
; Local Constant/Variable Declaration Section
;==============================================
Local $hFile = FileOpen($sFilePath, 0)
If $hFile = -1 Then Return SetError(1)
$aArray = StringSplit(StringRegExpReplace(FileRead($hFile),"\r\n|\r", @LF), @LF)
FileClose($hFile)
Return 1
EndFunc ;==>_FileReadToArray
З.Ы. Сколько я не тестировал, всё время получается правильный массив. В чём моя ошибка?