Что нового

[Данные, строки] Число строк в файле

ggzgamer

Осваивающий
Сообщения
134
Репутация
23
Есть ли в AutoIT функция, позволяющая выяснить количество строк в файле .txt? Это число хочу присвоить переменной цикла с заданым числом повторений и считывать со строк данные.
Или есть способ сделать обработку иначе. Например если уже конец файла, то закрывать его и выводить результат обработки. Сам файл из себя представляет определённое количество строк, где из каждой строки нужно взять только 3 первых символа, являющиеся цифрами 2-х - 3-х значного числа. Эти числа будут обрабатываться далее по заданновму алгоритму (определение мат ожидания последовательности, её центральный и n-е моменты). Занимаюсь я теорией вероятности и математической статистикой и autoIT, думаю можно использовать для этих целей, за неумением пользоваться другими языками программирования)
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,320
ggzgamer,
_FileCountLines()
 
Автор
G

ggzgamer

Осваивающий
Сообщения
134
Репутация
23
Ну если самому процедуру писать, то думаю тоже можно, основанную на поиске конца файла. Но тут просто название процедуры и нет её тела =(
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,320
ggzgamer [?]
где из каждой строки нужно взять только 3 первых символа, являющиеся цифрами 2-х - 3-х значного числа.
Если все три первых знака строки - цифры, то можно еще так попробовать:
Код:
#include <Array.au3>

$sText = FileRead(@ScriptDir & '\Test.txt')
$aFirst_Three_Digits = StringRegExp($sText, '(?m)^\d{3}', 3)
If Not @error Then
	_ArrayDisplay($aFirst_Three_Digits)
Else
	MsgBox(16, 'Error', 'StringRegExp')
EndIf

Ну если самому процедуру писать, то думаю тоже можно, основанную на поиске конца файла. Но тут просто название процедуры и нет её тела =(
В справке эту функцию посмотрите.
 
Автор
G

ggzgamer

Осваивающий
Сообщения
134
Репутация
23
Всё, всё спасибо. Я просто не знаю всех функций include. Теперь понял, что _FileCountLines работает нормально. Можно тему закрывать, как решённую.
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
622
OffTopic:
ggzgamer
если серьезно занимаешься, то я тебе крайне рекомендую использовать matlab. при сколь угодно большом кол-ве вычислений преимущество в скорости обработки будет огромной



Добавлено:
Сообщение автоматически объединено:

а если по теме, то используй в цикле FileReadLine c выходом из цикла при достижении конца файла
Код:
$sFile = @ScriptDir & '\test.txt'
$hFile = FileOpen($sFile, 0)
Do
    $sLine = FileReadLine($hFile)
    $err = @error
    MsgBox(0, '', $sLine)
Until $err = -1
 

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
Число строк ещё можно так получить:

Код:
$hFile = FileOpen(@ScriptDir & "\test.txt")
$hRead = FileRead($hFile)
$hNumb = StringSplit($hRead, @CRLF, 1)
MsgBox(0, "", $hNumb[0])


Или вот:

Код:
Global $hTemp

$hFile = FileOpen(@ScriptDir & "\test.txt")
$hRead = FileRead($hFile)

$hNumb = StringSplit($hRead, @CRLF, 1)
For $i = 1 To $hNumb[0]
	$hTemp &= $i & " = " & StringLeft($hNumb[$i], 3) & @CRLF
Next	

MsgBox(0, "", "Число строк = " & $hNumb[0] & @CRLF & "Первые 3 символа каждой строки:" & @CRLF & $hTemp)
 

AZJIO

Меценат
Меценат
Сообщения
2,756
Репутация
1,151
Код:
MsgBox(0, '', UBound(StringRegExp(FileRead(@ScriptDir&'\file.txt'), '(\r\n|\r|\n)', 3))+1)
 

Norm

Знающий
Сообщения
113
Репутация
15
Уже зная, как я бы мог найти число строк, решил поинтересоваться, быть может есть способ получше моего.
Новых идей здесь не нашел, но хотел бы добавить пару своих примечаний после прочтения темы.
а если по теме, то используй в цикле FileReadLine c выходом из цикла при достижении конца файла
Не совсем эффективное решение данной проблемы, особенно для больших файлов. Об этом так же в справке сказано:
С точки зрения производительности, использовать эту функцию в цикле, увеличивая параметр line на 1 при в каждом шаге цикла - является плохой идеей. Это заставляет AutoIt перечитывать файл с самого начала до указанной строки.

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

Если нужно подсчитал и использовать в последующем только заполненные строки, то вот немного переделанный код от AZJIO
Код:
MsgBox(0, '', UBound(StringRegExp(FileRead(@ScriptDir&'\file.txt'), '([^\v]+)', 3))+1)
 
Верх