Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   Как с помощью FileReadLine прочитать последнюю строчку файла? (http://forum.oszone.net/showthread.php?t=163616)

sashadeg 15-01-2010 18:05 1321123

Как с помощью FileReadLine прочитать последнюю строчку файла?
 
Цитата:

Цитата из справки
Если номер строки line не указан, то возвращается следующая строка. Следующей для вновь открытого файла является его первая строка.

Если я правельно понял, это мне может помочь.
Помогите пожалуйста отразить это в коде...

FlatX007 15-01-2010 18:13 1321128

В примере к этой функции всё написано ...

FileReadLine - Возвращаемое значение:

Значение
@error равное 0 означает успешное выполнение,
-1 - достигнут конец файла
1 другие ошибки выполнения.

Если @error = -1 то это была последняя строка :)

beve 15-01-2010 18:25 1321132

Цитата:

Цитата sashadeg
Как с помощью FileReadLine прочитать последнюю строчку файла? »

В параметре line указать -1, так ведь в справке и написано.
line [optional] The line number to read. The first line of a text file is line 1 (not zero), last line is -1.

sashadeg 15-01-2010 18:27 1321133

Цитата:

Цитата FlatX007
-1 - достигнут конец файла »

в том то и дело, что если я ставлю "-1" то возвращаяет почему то пустую строку... хотя никаких или "энтеров" нет. точно.

Creat0R 15-01-2010 19:09 1321165

Цитата:

Цитата sashadeg
если я ставлю "-1" то возвращаяет почему то пустую строку... хотя никаких или "энтеров" нет. точно. »

Файл в студию.

Хотя можно и так попробовать:

Код:

$sFile = @DesktopDir & "\test.txt"
$sLine = StringRegExpReplace(StringStripWS(FileRead($sFile), 2), "(?s:.*)[\r\n]+(.*)$", "\1")

ConsoleWrite($sLine)

Строка на конце содержащая одни лишь пробелы, будет игнорирована в этом случае.

sashadeg 16-01-2010 13:49 1321684

Перезагрузив комп, у меня стало возвращать при "-1" всякую ерунду (типа когда кириллицу не поддерживает) Хотя у меня русские символы отсутствуют... =(

FlatX007 17-01-2010 01:12 1322244

Код:

#include <Array.au3>

$iEndString = _ReadString(@ScriptDir & '\' & '1.txt')
If Not (@error) Then MsgBox(64, "", $iEndString)

Func _ReadString($sFfile = "")
    Local  $avArray[1]
    $sfile = FileOpen($sFfile, 0)
    If $sfile = -1 Then
        SetError(1, 0, 0)
        Return 0
    EndIf

    While
1
        $line = FileReadLine($sfile)
        If @error = -1 Then Return UBound($avArray) - 1
        If $line <> "" Then _ArrayAdd ($avArray, $line)
    Wend

    FileClose($sfile)
EndFunc


FlatX007 17-01-2010 01:45 1322261

Хотя так быстрее :)

Код:

#include <file.au3>

Dim $aRecords, $ii = 0
_FileReadToArray(@TempDir & '\' & '11.txt', $aRecords)

For $i = 0 to UBound($aRecords) - 1
    If $aRecords <> "" Then $ii += 1
Next

MsgBox(64, "", FileReadLine(@TempDir & '\' & '11.txt', $ii - 1))


Creat0R 17-01-2010 13:47 1322538

Цитата:

Цитата FlatX007
так быстрее »

А так:

Код:

#include <File.au3>

$iCount = _FileCountLines(@DesktopDir & '\File.txt')
MsgBox(64, "", FileReadLine(@DesktopDir & '\File.txt', $iCount))

;)

Это по сути тот же вариант что я предложил выше, и тот вариант ещё быстрее (с точки зрения обработки).

wwe 01-02-2010 20:52 1336278

#include <GUIConstantsEx.au3>
local $msg,$x1,$x2
guicteate ('',300,300)
$x1=10
$x2=filereadline (@Scriptdir & '\xxx.txt',$x1)
guictrlcteatelabel ($x2,0,0)
guisetstate ()
while 1
$msg=guigetmsg()
select
case $msg=$gui_event_close
exitloop
wend
всё вот такой простенький скрипт может где-то ошибки есть я ведь с памяти писал
$X1=10! 10 это у нас номер строки в файле тоисть этот скрип прочитает и выведет 10 строку хочень поставь for n=1 do и так далее

Creat0R 01-02-2010 21:33 1336329

Цитата:

Цитата wwe
вот такой простенький скрипт »

Который нужно заключать в теги кода (как минимум).

Цитата:

Цитата wwe
10 это у нас номер строки в файле тоисть этот скрип прочитает и выведет 10 строку »

А если перечитать название темы и её содержание? нужна последняя строка.


Время: 21:30.

Время: 21:30.
© OSzone.net 2001-