madmasles
Advanced Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору WETUI, Вернуть заданное количество последних строк из файла можно попробовать так: Код: $sFile = @ScriptDir & '\chatlog.txt';полный путь к файлу, который читаем. $iCount = 15 ;количество возвращаемых с конца строк $sPost = _GetLastLineCount($sFile, $iCount) If Not @error Then MsgBox(64, '', $sPost) Else MsgBox(16, '', 'error') EndIf Func _GetLastLineCount($sPath, $iLineCount, $sDelim = @CRLF) ;$sPath - полный путь к файлу ;$iLineCount - количество возвращаемых с конца строк ;$sDelim - разделитель строк (по умолчанию @CRLF, т.е. перенос строки) ;в случае успешного выполнения возвращает текст из заданного кол-ва последних строк ;с заданными разделителями и @error = 0. Если в файле строк меньше или равно $iLineCount, ;то возвращает все строки. ;в случае ошибки возвращает пустую строку и @error = 1. Local $hFile, $sText, $aTemp, $iStart, $sResult If Not FileExists($sPath) Then Return SetError(1) $hFile = FileOpen($sPath, 0) If $hFile = -1 Then Return SetError(1) $sText = FileRead($hFile) If Not @extended Then FileClose($hFile) Return SetError(1) EndIf FileClose($hFile) If StringInStr($sText, @LF) Then $aTemp = StringSplit(StringStripCR($sText), @LF) ElseIf StringInStr($sText, @CR) Then $aTemp = StringSplit($sText, @CR) Else Return SetError(0, 0, $sText) EndIf If Not $aTemp[0] Then Return SetError(1) If $aTemp[0] <= $iLineCount Then $iLineCount = $aTemp[0] $iStart = 1 Else $iStart = $aTemp[0] - $iLineCount + 1 EndIf For $i = $iStart To $aTemp[0] If $aTemp[$i] Then If $i <> $aTemp[0] Then $sResult &= $aTemp[$i] & $sDelim Else $sResult &= $aTemp[$i] EndIf EndIf Next If Not $sResult Then Return SetError(1) Return SetError(0, 0, $sResult) EndFunc ;==>_GetLastLineCount | PS Пустые строки игнорируются, т.е. если из 15 последних строк 3 - пустые, то вернет 12. Это можно изменить. | Всего записей: 1277 | Зарегистр. 25-09-2008 | Отправлено: 03:30 10-01-2011 | Исправлено: madmasles, 22:11 10-01-2011 |
|