Что нового

[Массивы] Как считать определенное количество строк из файла в массив ?

Ralf479824

Новичок
Сообщения
13
Репутация
0
Здравствуйте!

У меня есть вопрос - как считать определенное количество строк из файла в массив ?

Я знаю что есть функция FilReadLine .
Но если считывать из большого файла построчно это слишком долго.
Вообщем в чем задача:
1.Есть файл который имеет 1 миллион строк.
2.Нужно из этого файла считать 500 тысяч строк
3.Почему именно так потому что если загружать файл целиком - это занимает оперативную память.
4.Размер файла может меняться
5.Размер строк тоже может быть разный
 
A

Alofa

Гость
Можно конечно все это организовать и так:
Код:
Local $sText, $i
Local $iStrings = 500 ; Количество строк для считывания

$hFile = FileOpen(@ScriptDir & '\База Данных.txt')
If $hFile = -1 Then Exit MsgBox(4096, "Ошибка", "Невозможно открыть файл.")

Do ; Читает построчно текст, пока счетчик "$i" не сравняется с "$iStrings"
    $sLine = FileReadLine($hFile)
    If @error = -1 Then ExitLoop
	$sText &= $sLine & @CRLF
	$i += 1
Until $i = $iStrings

ConsoleWrite($sText)

FileClose($hFile)
 
A

Alofa

Гость
Ralf479824 сказал(а):
... на это уйдет много времени
Не успел дописать - конечно это будет долго. Поэтому с большими файлами подобного типа я бы посоветовал вам работать через _SQLite.
 
Автор
R

Ralf479824

Новичок
Сообщения
13
Репутация
0
Нужно попробовать , ну отсюда сразу и вопрос как считать файл в эту базу данных ?
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
247
Работать с готовой базой _SQLite конечно быстро, но для того, чтобы создать базу и внести в неё миллион строк на это уйдёт масса времени, быстрее будет через массив.
 
Автор
R

Ralf479824

Новичок
Сообщения
13
Репутация
0
остается только одну проблему решить - что делать если в массив нужно загрузить файл очень большого размера ,а оперативной памяти не так много?
Ну что я имею ввиду так это то что если мы загрузим файл с количеством строк 8 миллионов или выше то может просто не хватить оперативы ... Уже сколько бьюсь об эту проблему никак не могу её решить. Спасибо всем что отвечаете но может у кого-то есть идеи как решить эту проблему ? :stars: :IL_AutoIt_1:
 
A

Alofa

Гость
ra4o сказал(а):
Работать с готовой базой _SQLite конечно быстро, но для того, чтобы создать базу и внести в неё миллион строк на это уйдёт масса времени...
OffTopic:
...лучше день потерять, потом за пять минут долететь.
Из м-ма: "Крылья, ноги и хвосты"​


weweWe45s сказал(а):
Поясните плиз :-\
 

weweWe45s

Новичок
Сообщения
36
Репутация
1
считать по шаблону "все до окончания строки \r\n" из открытого файла заданное количество раз
p.s. предполагается что окончание строки виндовс формата
 
A

Alofa

Гость
weweWe45s сказал(а):
... из открытого файла ...

Так ведь вся проблема-то в том, чтобы открыть:
Ralf479824 сказал(а):
...2.Нужно из этого файла считать 500 тысяч строк
3.Почему именно так потому что если загружать файл целиком - это занимает оперативную память.
 

weweWe45s

Новичок
Сообщения
36
Репутация
1
разрезать на куски плюс метка на месте реза на вроде продолжение следует ну это так фантазия проверять нужно
 
A

Alofa

Гость
Ralf479824
Дайте ка кусочек этой базы данных, для экспериментов (или сочините подобное).


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

И еще вопрос:
Ralf479824 сказал(а):
...считать определенное количество строк из файла в массив ?
Что вы дальше собираетесь делать с этим, висящим в памяти, массивом?
 
Автор
R

Ralf479824

Новичок
Сообщения
13
Репутация
0
Вот пример такого файла в нем конечно все стоки одинаковые но в реальности они могут быть разные.
Дальше после загрузки такого файла в массив я планирую выполнять редактирование строк , замена и удаление частей строк.
Ну вообщем разного рода операции.
 

Вложения

  • 6789.zip
    123.2 КБ · Просмотры: 11

joiner

Модератор
Локальный модератор
Сообщения
3,557
Репутация
628
Ralf479824
можно чуть сначала. откуда берется этот файл? создается сторонней программой или своей?
ну и 40-50 метров в памяти это не так много.
 
Автор
R

Ralf479824

Новичок
Сообщения
13
Репутация
0
Извиняюсь что раньше не уточнил , этот файл создается сторонней программой...


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

Получается нужно придумать способ как разрезать этот файл на 500 тысяч строк перед загрузкой в скрипт ? Если я всё правильно понял то только остается придумать способ разрезания такого файла... У меня возникает идея но она подходит только в том случаи если файл всегда будет такого размера , но если он еще больше тогда что делать...
 

joiner

Модератор
Локальный модератор
Сообщения
3,557
Репутация
628
Интересно, что за программа создает текстовый файл таких объёмов? И в нем читаемый текст
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
А в чем вообще вопрос? Покуда есть память у приложения, используйте ее. Загружайте файл целиком и не парьтесь. Для получения массива разбейте прочитанный файл с помощью регулярных выражений по символу конца строки. Ни в коем случае не читайте файл построчно.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,486
Ralf479824
Всё зависит от действий выполняемых с массивом.
Решение простое - по мере чтения строк делать эти самые действия, после завершения действия высвобождать память (очищать или заполнять другими данными переменную).
Если размер файла слишком большой чтобы уместиться в памяти, то выводить предупреждение (это не сложно подсчитать).
 
Верх