Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
Awwent
0 / 0 / 1
Регистрация: 18.11.2016
Сообщений: 81
1

Загрузка в StringList больших txt-файлов

16.03.2017, 15:23. Просмотров 514. Ответов 15
Метки нет (Все метки)

Обычным опендиалогом загружать в стринглист текстовики 1-N-ое кол-во гб никак.
Ругается на Out of Memory, но при этом на ПК 32гб ОЗУ.
Как можно иначе загружать большие текстовики?
Надо что-бы в программу загружали Строки с данными там например:
Note
Note2
Note3
и т.д
Потом загружали второй текстовик, он должен искать повторяющиеся строки и удалять их и соединять в единое
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.03.2017, 15:23
Ответы с готовыми решениями:

Загрузка больших текстовых файлов
Подскажите пожалуйста,как можно спроецировать файл в память (текстовый) и...

Загрузка больших текстовых файлов в массив и сверка
Всем привет: Имеем: Два текстовых файла размером примерно по 100MB каждый....

Загрузка из двух файлов txt в один StringGrid1
Здравствуйте, господа программисты! Ни как не могу справиться, помогите...

Загрузка и обработка большого файла в StringList
var t:TextFile ; s:TStringlist ; x:String ; begin if...

Загрузка из файла в stringgrid с использованием stringlist
Код отлично работает в одном приложении, но отказывается работать в другом ...

15
droider
Universal
Эксперт Pascal/Delphi
4400 / 2447 / 764
Регистрация: 04.10.2012
Сообщений: 8,899
16.03.2017, 16:13 2
Awwent, так уже вроде была на днях тема. Клонируемся, да?
0
krapotkin
3435 / 3039 / 1050
Регистрация: 14.04.2014
Сообщений: 14,751
Записей в блоге: 15
16.03.2017, 17:46 3
для очень больших файлов ищите другие способы, чем тащить все в рот...
например
http://docwiki.embarcadero.com/Libra...eader.ReadLine
0
Awwent
0 / 0 / 1
Регистрация: 18.11.2016
Сообщений: 81
16.03.2017, 19:00  [ТС] 4
А как использовать примеры есть?
0
qwertehok
2306 / 2210 / 602
Регистрация: 29.08.2013
Сообщений: 14,756
16.03.2017, 20:36 5
я загрузал в StringList файл в 2 гига - дальше outofmemory
спасли только Stream'ы

теперь гружу csv файл в 4-5 гигов со скоростью 1000 строк в секунду, далее гружу в MSSQL с проверками

Добавлено через 46 секунд
Awwent, напиши для чего тебе такое и я поделю кодом для обработки (правда у меня csv, но гружу я построчно)
0
krapotkin
3435 / 3039 / 1050
Регистрация: 14.04.2014
Сообщений: 14,751
Записей в блоге: 15
16.03.2017, 21:19 6
я чувствую надо слить темы
Работа с огромными файлами
0
qwertehok
2306 / 2210 / 602
Регистрация: 29.08.2013
Сообщений: 14,756
17.03.2017, 21:43 7
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
var
SR : TStreamReader;
 
begin
SR := TStreamReader.Create(filename);
  while not (SR.EndOfStream) do
  begin
    sl.DelimitedText:=SR.ReadLine; // читаю строку в StringList
    for I := 0 to sl.Count-1 do //так как у меня csv, то выставив разделителем ";" я обхожу все что внутри и проверяю
    begin
  
    end;
  end;
SR.Free;
end;
пробовал через StringList - дохнет на 4гб файлах
пробовал другие потомки TStream - некоторые очень быстрые, но как только нужно разбить файл по строкам - все упирается в работу с буфером и скорость равняется с TStreamReader.
в 10.1 вроде было написано что придумали TStreamBuffer или что-то такое - не пробовал

У меня сейчас с проверками получается 1000 строку в секунду
0
krapotkin
3435 / 3039 / 1050
Регистрация: 14.04.2014
Сообщений: 14,751
Записей в блоге: 15
17.03.2017, 21:48 8
не 1000, а 1000 * на число строк из файла 2

вообще работа со строками упирается исключительно в поиск разделителя строки в буфере, для этого приходится искать перебором, вот и предел скорости
остальное - просто подгрузка данных в этот буфер
0
Awwent
0 / 0 / 1
Регистрация: 18.11.2016
Сообщений: 81
19.03.2017, 02:06  [ТС] 9
Цитата Сообщение от krapotkin Посмотреть сообщение
я чувствую надо слить темы
Работа с огромными файлами
Проблема в том, что виснет после пару проверенных строк.
А в потоке лажа получается. Ошибочки там и некорректная работа
0
northener
пофигист широкого профиля
3427 / 2326 / 631
Регистрация: 15.07.2013
Сообщений: 13,775
19.03.2017, 02:21 10
Цитата Сообщение от Awwent Посмотреть сообщение
А в потоке лажа получается
Естественно. Тем более что потоки тут ничем помочь не могут.
0
Awwent
0 / 0 / 1
Регистрация: 18.11.2016
Сообщений: 81
19.03.2017, 02:53  [ТС] 11
Цитата Сообщение от northener Посмотреть сообщение
Естественно. Тем более что потоки тут ничем помочь не могут.
Ну, а как в форме сделать так, что-бы софт не виснул?
0
krapotkin
3435 / 3039 / 1050
Регистрация: 14.04.2014
Сообщений: 14,751
Записей в блоге: 15
19.03.2017, 05:56 12
Капитан: "Нужно исправить код!"

Добавлено через 2 минуты
потоки могут помочь только если предварительно разбить большие данные на N кусков и каждому из потоков дать искать в своем куске
тогда они будут действовать параллельно
но потоков все равно должно быть не более 2 на ядро
0
Awwent
0 / 0 / 1
Регистрация: 18.11.2016
Сообщений: 81
19.03.2017, 14:23  [ТС] 13
Цитата Сообщение от krapotkin Посмотреть сообщение
Капитан: "Нужно исправить код!"
m1.Clear;
FileName1 := ExtractFilePath(ParamStr(0)) + BigBaseText.Text + '.txt';
FileName2 := ExtractFilePath(ParamStr(0)) + smallText.Text + '.txt';
AssignFile(f1, FileName1);
Reset(f1);
AssignFile(f2, FileName2);
Reset(f2);
while not Eof(f1) do
begin
readLn(f1, s1);
CloseFile(f2);
Reset(f2);
while not EOF(f2) do
begin
readLn(f2, s2);
p := pos(s2, s1);
if (p > 0) then
begin
m1.Lines.Add(s2 + ' : ' + s1);
end;
end;
end;
CloseFile(f1);
CloseFile(f2);
0
krapotkin
3435 / 3039 / 1050
Регистрация: 14.04.2014
Сообщений: 14,751
Записей в блоге: 15
19.03.2017, 14:44 14
почему у меня не виснет?
0
Awwent
0 / 0 / 1
Регистрация: 18.11.2016
Сообщений: 81
19.03.2017, 14:48  [ТС] 15
Цитата Сообщение от krapotkin Посмотреть сообщение
почему у меня не виснет?
Вот..
0
Миниатюры
Загрузка в StringList больших txt-файлов  
krapotkin
3435 / 3039 / 1050
Регистрация: 14.04.2014
Сообщений: 14,751
Записей в блоге: 15
19.03.2017, 17:16 16
ну так может работает оно
у вас же цикл
полный перебор каждый с каждым
это много

отладчик-то для чего? поставьте точку останова, оно и покажет
0
19.03.2017, 17:16
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.03.2017, 17:16

Сохранение данных с ListView в .txt и загрузка с .txt
Сохранение данных с ListView в .txt и загрузка с .txt Помогите.

Загрузка файла *.txt при открытии приложения при двойном клике на самом файле *.txt
Здравствуйте! Подскажите как сделать так, чтобы при двойном клике по текстовому...

Найти дробные значения y(x) и g(x) из файлов Y.DAT.txt и G.DAT.txt


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru