Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Чтение строк из лога и запись их в файл

Ответить
Настройки темы
[решено] Чтение строк из лога и запись их в файл

Пользователь


Сообщения: 74
Благодарности: 0

Профиль | Отправить PM | Цитировать


Изменения
Автор: support23
Дата: 23-08-2012
Добрый день!
Есть необходимость прочитать N последних строк из файла (например log.txt)
и записать эти строки в файл (например task.txt)
вот что получилось, но скрипт работает корректно только с 5 последними строками, что нужно изменить чтобы увеличить кол-во обрабатываемых строк?

Код: Выделить весь код
#include <FileConstants.au3>
$Pos = 1000
$space = "-----------------------------"
$hFile = FileOpen(@ScriptDir & '\log.txt')

FileSetPos($hFile, -196, $file_end)
$sText = FileRead($hFile)
FileClose($hFile)

For $i = 1 To 5
    $string = _ReadString($Pos, $i)
	FileWrite(@ScriptDir & "\task.txt", $string & @CRLF)
	        ClipPut($string)
	 Next
	 
Func _ReadString(ByRef $Pos, $i)
    $TmpPos = StringInStr($sText, @CRLF, 0, -$i)
    $string = StringMid($sText, $TmpPos + 2, $Pos - $TmpPos - 2)
    $Pos = $TmpPos
    Return $string
EndFunc

Отправлено: 13:12, 23-08-2012

 

Аватара для madmasles

Ветеран


Сообщения: 812
Благодарности: 353

Профиль | Отправить PM | Цитировать


support23,
Попробуйте так.
Код: Выделить весь код
#include <Array.au3>

Dim $aError[5] = ['Успех', 'Не существует файла:', 'Пустой файл:', 'Ошибка открытия файла:', 'Ошибка чтения файла:']
$sFile = @ScriptFullPath
;$sFile = @ScriptDir & '\1.txt'
$iCount = Random(5, 15, 1)
ConsoleWrite($iCount & @LF)

$aLast = _FileReadLastLine($sFile, $iCount)
If @error Then
    MsgBox(16, 'Error', $aError[@error] & @LF & $sFile)
Else
    _ArrayDisplay($aLast, $aError[@error])
EndIf

Func _FileReadLastLine($s_File, $i_LastCount)
    ;$s_File - полный путь к файлу
    ;$i_LastCount - количество возвращаемых с конца строк
    ;Вернет массив $a_Ret с $i_LastCount последними строками, $a_Ret[0] = $i_LastCount
    ;пустые строки удаляются.
    Local $h_File, $i_Size, $s_Text, $aTemp, $i_Pos, $f_ExitLoop, $i_Start = 2, $a_Text, $a_Ret[2]
    If Not FileExists($s_File) Then Return SetError(1, 0, '')
    $i_Size = FileGetSize($s_File)
    If Not $i_Size Then Return SetError(2, 0, '')
    $h_File = FileOpen($s_File, 0)
    If $h_File = -1 Then Return SetError(3, 0, '')
    $i_Pos = $i_LastCount + 1
    While 1
        $s_Text = ''
        FileSetPos($h_File, -$i_Pos, 2)
        $s_Text = FileRead($h_File)
        $s_Text = StringRegExpReplace(StringStripCR($s_Text), '([\n]+$)', '')
        $s_Text = StringRegExpReplace($s_Text, '(\n){2,}', '$1')
        If $f_ExitLoop Then ExitLoop
        StringReplace($s_Text, @LF, '')
        If @extended >= $i_LastCount Then ExitLoop
        $i_Pos += $i_LastCount + 1
        If $i_Pos > $i_Size Then
            $f_ExitLoop = True
            $i_Start = 1
            $i_Pos = $i_Size
        EndIf
    WEnd
    FileClose($h_File)
    If Not $s_Text Then Return SetError(4, 0, '')
    $a_Text = StringSplit($s_Text, @LF)
    $s_Text = ''
    If $a_Text[0] > 1 Then
        If $f_ExitLoop Then
            ReDim $a_Ret[$a_Text[0] + 1]
        Else
            ReDim $a_Ret[$a_Text[0]]
        EndIf
        For $i = $i_Start To $a_Text[0]
            $a_Ret[0] += 1
            $a_Ret[$a_Ret[0]] = StringStripWS($a_Text[$i], 7)
        Next
    Else
        $a_Ret[0] = 1
        $a_Ret[1] = StringStripWS($a_Text[1], 7)
    EndIf
    Return $a_Ret
EndFunc   ;==>_FileReadLastLine
Это сообщение посчитали полезным следующие участники:

Отправлено: 19:52, 23-08-2012 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Пользователь


Сообщения: 74
Благодарности: 0

Профиль | Отправить PM | Цитировать


Не подскажите как сделать вывод строк в файл (сейчас отображаются в окне), и где в теле скрипта задается кол-во строк?

Отправлено: 08:57, 24-08-2012 | #3


Аватара для gora

Ушёл из жизни


Сообщения: 6021
Благодарности: 3491

Профиль | Отправить PM | Цитировать


support23, может так:
Код: Выделить весь код
#include <file.au3>

Local $aRecords
$i_LastCount = 5

If Not _FileReadToArray(@ScriptDir & '\log.txt', $aRecords) Then
    MsgBox(4096, "Ошибка", "Ошибка " & @error & " чтения файла в массив")
    Exit
EndIf
If $aRecords[0] <= $i_LastCount Then
    MsgBox(4096, "Ошибка", "В файле всего " & $aRecords[0] & " строк(и)")
    Exit
EndIf
_FileWriteFromArray(@ScriptDir & '\task.txt', $aRecords, $aRecords[0] - $i_LastCount + 1)
Exit
Это сообщение посчитали полезным следующие участники:

Отправлено: 13:16, 05-10-2012 | #4


Аватара для AZJIO

Старожил


Сообщения: 254
Благодарности: 126

Профиль | Отправить PM | Цитировать


Вот ещё по теме

support23, GUICtrlRead, FileWrite
Это сообщение посчитали полезным следующие участники:

Отправлено: 04:39, 06-10-2012 | #5


Пользователь


Сообщения: 74
Благодарности: 0

Профиль | Отправить PM | Цитировать


Спасибо всем за помощь! мне подошел вариант который предложил gora

Отправлено: 12:04, 18-10-2012 | #6



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Чтение строк из лога и запись их в файл

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - поиск строк по шаблону и запись в отдельный файл AVTS Скриптовые языки администрирования Windows 4 13-07-2012 00:51
CMD/BAT - [решено] помогите дописать команду - чтение строк из файла jannaly Скриптовые языки администрирования Windows 4 02-06-2012 17:38
2008 R2 - Чтение лога DHCP differ Windows Server 2008/2008 R2 0 16-05-2012 18:14
VBS/WSH/JS - [решено] Чтение и запись в файл Dt83 Скриптовые языки администрирования Windows 6 25-07-2011 14:29
.NET - Запись настроек программы в файл txt и чтение этих настроек обратно ProgrammerPC Программирование и базы данных 4 11-12-2009 10:46




 
Переход