PDA

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


sashadeg
15-01-2010, 18:05
Если номер строки line не указан, то возвращается следующая строка. Следующей для вновь открытого файла является его первая строка.
Если я правельно понял, это мне может помочь.
Помогите пожалуйста отразить это в коде...

FlatX007
15-01-2010, 18:13
В примере к этой функции всё написано ...

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

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

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

beve
15-01-2010, 18:25
Как с помощью 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
-1 - достигнут конец файла »
в том то и дело, что если я ставлю "-1" то возвращаяет почему то пустую строку... хотя никаких или "энтеров" нет. точно.

Creat0R
15-01-2010, 19:09
если я ставлю "-1" то возвращаяет почему то пустую строку... хотя никаких или "энтеров" нет. точно. »
Файл в студию.

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


$sFile = @DesktopDir (http://www.autoitscript.com/autoit3/docs/macros.htm#@DesktopDir) & "\test.txt"
$sLine = StringRegExpReplace (http://www.autoitscript.com/autoit3/docs/functions/StringRegExpReplace.htm)(StringStripWS (http://www.autoitscript.com/autoit3/docs/functions/StringStripWS.htm)(FileRead (http://www.autoitscript.com/autoit3/docs/functions/FileRead.htm)($sFile), 2), "(?s:.*)[\r\n]+(.*)$", "\1")

ConsoleWrite (http://www.autoitscript.com/autoit3/docs/functions/ConsoleWrite.htm)($sLine)

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

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

FlatX007
17-01-2010, 01:12
#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
Хотя так быстрее :)

#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
так быстрее »
А так:

#include <File.au3>

$iCount = _FileCountLines(@DesktopDir (http://www.autoitscript.com/autoit3/docs/macros.htm#@DesktopDir) & '\File.txt')
MsgBox (http://www.autoitscript.com/autoit3/docs/functions/MsgBox.htm)(64, "", FileReadLine (http://www.autoitscript.com/autoit3/docs/functions/FileReadLine.htm)(@DesktopDir (http://www.autoitscript.com/autoit3/docs/macros.htm#@DesktopDir) & '\File.txt', $iCount))

;)

Это по сути тот же вариант что я предложил выше (http://forum.oszone.net/post-1321165.html#post1321165), и тот вариант ещё быстрее (с точки зрения обработки).

wwe
01-02-2010, 20:52
#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
вот такой простенький скрипт »
Который нужно заключать в теги кода (как минимум).

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




© OSzone.net 2001-2012