|
4 / 4 / 0
Регистрация: 18.07.2013
Сообщений: 382
|
||||||
Распарсить файл и записать результаты в массив10.04.2014, 15:37. Показов 5633. Ответов 46
Метки нет (Все метки)
Ребята, подмогите пожалуйста.
У меня Текстовый файл.txt. Первые две строки Заглавие Потом идут числовые значения через TAB #13 Пример файла, после первых двух строк:
ВОПРОС: КАК МНЕ ИЗ СТРОКИ БРАТЬ ЗНАЧЕНИЯ? ДОПУСТИМ, ДЕВЯТОЕ ЗНАЧЕНИЕ 2,54 ИЗ ПЕРВОЙ СТРОКИ СРАВНИТЬ С ДЕВЯТЫМ ИЗ ВТОРОЙ 1,55. Читал про TString and TStringList, там как-то сжато. Про выкарчевывание символов из строки нет... Спасибо всем. Добавлено через 21 минуту ОПЕРАТИВНАЯ ПАМЯТЬ В цикле заполняется StringGrid (17 строк), при количестве колонок более 100000 не хватает оперативной памяти на моем каличе и жутко начинает виснуть всё на свете. Как мне сохранять в тектовый файл данные и чтоб после каждой строчки оперативка очищалась или как нибудь по другому?
0
|
||||||
| 10.04.2014, 15:37 | |
|
Ответы с готовыми решениями:
46
Распарсить текстовый файл и записать все числа в массив
|
| 14.04.2014, 13:34 | |
|
0
|
|
| 14.04.2014, 13:43 | |
|
0
|
|
|
4 / 4 / 0
Регистрация: 18.07.2013
Сообщений: 382
|
|
| 14.04.2014, 13:56 [ТС] | |
|
где же истина (True)?
0
|
|
|
3944 / 1869 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
|
||||||
| 14.04.2014, 19:34 | ||||||
|
Сложновато мне понять твои описания. Ну, пробежавшись по твоим темам попытаюсь воссоздать технологию вычислений.
1. Ты составляешь все сочетания целых чисел, дающих в сумме 100. 2. Загоняешь очередное сочетание в Excel для того, чтобы получить какие-то результаты. Не буду ставить под сомнение сам смысл данного хода - видимо в Дэлфи этого нельзя сделать. 3. Выбираешь из Excel-а полученный результат. Сколько же этих результирующих чисел должно быть? Раньше речь шла о 16 значениях в строке, сейчас о 18-ти? 4. Вставляешь их в строку (или столбец?) StringGrid-а. Предположу что в столбец. И так все эти 4 пункта должны повторяться пока не будут перебраны все сочетания/ комбинации. После этого ты хочешь иметь возможность сортировать эти столбцы в StringGrid-е и дать пользователю возможность, как минимум, их просматривать. Грубо прикидывая, таких сочетаний может быть примерно 90^10. Если брать только 6 результирующих чисел и по 10 байт на каждое - это будет 90^10*60 байт. 2092070640600 Гб. Что то у меня слишком много получилось. Видимо рассуждения неверны. В любом случае накопление результатов стоит делать в файле. Стоит ли сохранять значения перебора? Эти первые 11 чисел. Это ведь существенная добавка. Может уже можно обойтись и без них? Тем более в StringGrid-е. Ну да ладно. Типизированный файл для твоего случая будет выглядеть так:
С выборкой из файла, надеюсь, понятно. Теперь если хочешь листать данные файла через StringGrid предлагаю вариант с обработкой клавиш управления. PgUp, PgDown и т.п. Просто запоминать текущущее положение в файле и при нажатии одной из этих клавиш, выдавать соответственно предыдущие несколько записей или следующие. Не забывая предварительно переместить указатель на первую из нужных. Вот с сортировкой сложнее. При таких объёмах данных, как я посчитал - простыми методами не обойтись. Но если их меньше - загружать все данные в массив, сортировать массив и опять выгружать в файл.
1
|
||||||
|
4 / 4 / 0
Регистрация: 18.07.2013
Сообщений: 382
|
||||||
| 15.04.2014, 15:39 [ТС] | ||||||
|
Добавлено через 6 часов 57 минут
0
|
||||||
|
3944 / 1869 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
|
||||||||||||||||
| 16.04.2014, 06:34 | ||||||||||||||||
|
PierL, Если у тебя будет примерно 600000 таких строк записей тогда, в принципе это всё можно обрабатывать в памяти. Ещё раз повторяю: записывай всё в массив и работай с данными в массиве. И не нужно их в файл выгружать. Только массив объявляй как динамический, тогда он будет храниться в динамической памяти. Массив с элементами в виде твоих записей данных. Вот так:
Я же тебе пример работы с типизированным файлом написал. Посмотри внимательней. Там и комментарии есть. Со структурированной переменной типа TZap работать так же как и в примере с массивом. Когда записываешь или читаешь в (из) неё данные из файла - пишется (читается) сразу вся запись. Можешь писать (читать) в массив:
0
|
||||||||||||||||
|
4 / 4 / 0
Регистрация: 18.07.2013
Сообщений: 382
|
|||||||
| 18.04.2014, 08:35 [ТС] | |||||||
|
извините, что так туплю! ![]() Добавлено через 8 минут Это получается?
0
|
|||||||
|
3944 / 1869 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
|
||||||||||||||||
| 18.04.2014, 19:03 | ||||||||||||||||
|
Так и пишешь команду:
Можно ещё сделать:
1
|
||||||||||||||||
|
4 / 4 / 0
Регистрация: 18.07.2013
Сообщений: 382
|
||
| 23.04.2014, 16:24 [ТС] | ||
|
Суть программы (программа для понимания), создаю массивы в SG1, считываю их в массив MyArr. Потом записываю массив в MoyFile.dat. Считываю этот файл в Мемо1. Потом вывожу массив в SG2 в столбик, по частям, по нажатию кнопки передвигаюсь по массиву. Вот в передвижении я запутался, объясни пожалуйста. Сразу говорю, я написал для понимания, в ней может по топорному написано, так что критика очень полезна. Мне нужно понимать. Спасибо
0
|
||
|
3944 / 1869 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
|
|
| 23.04.2014, 20:50 | |
|
Вот подправил, разбирайся. Там где немного исправил - поставил комментарии с !!!!!!!!!!!!!! в конце. А процедуры перемещения заменил полностью. Некогда особо комментировать. И так всё просто.
Кроме того, я уже писал, что если заменить в структуре Integer на Byte, а Real на Single - файл будет меньше. Проверил: файл уменьшился больше чем в 2 раза. Ещё я имел в виду перемещение по массиву страничное. Т.ё. по клику сразу на количество строк, сколько помещается в StringGrid2 (ColCount). А то по одной строке у тебя будет очень долго просматривать. Или может и такой вариант плюс страничный. Если построчный нужен вообще.
1
|
|
|
3944 / 1869 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
|
||||||
| 23.04.2014, 21:15 | ||||||
|
Обрати внимание, что в событии закрытия формы я вставил освобождение памяти массива.
Ну и, ты сам понимаешь, что нет необходимости писать данные в StringGrid а потом в массив. Можно сразу писать в массив. Иначе у тебя опять при большом StringGrid-е будут проблемы. Да и в файл нет необходимости записывать. Накопил данные в массиве и потом выдавай их частями в StringGrid по клику кнопок. При накоплении данных, если размерности массива не хватает - можно всегда дополнить:
0
|
||||||
|
4 / 4 / 0
Регистрация: 18.07.2013
Сообщений: 382
|
||
| 30.04.2014, 14:35 [ТС] | ||
|
Добавлено через 37 минут Одиночка, посмотрел программу, все чётко работает, спасибо тебе и поклон!
0
|
||
|
3944 / 1869 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
|
|
| 30.04.2014, 16:19 | |
|
Для преобразования Byte в String используется та же функция IntToStr. Для Single FloatToStr. Если ты это имел в виду.
0
|
|
|
Заблокирован
|
|
| 01.05.2014, 19:30 | |
|
Вообще-то тут никаких массивов и стринггридов не надо. Всё делается гораздо проще и короче. И размер будет не таким уж большим, если эти данные надо сохранить...
0
|
|
| 01.05.2014, 19:36 | |
|
Не по теме: Ждёмс описания.
0
|
|
|
Заблокирован
|
|
| 01.05.2014, 19:46 | |
|
Одиночка,
Смысла нет. Клиенту уже не надо. А вообще - поток.
0
|
|
|
3944 / 1869 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
|
|
| 01.05.2014, 19:51 | |
|
Думаю, и ТС ещё зайдёт. Он учится программировать, и новые знания ему не помешают. Да и для тех кто будет искать похожие решения - пригодится.
Имеешь в виду FileStream? Думаю не так всё просто. Ну, попробуй примерчик сделать. Плюс получишь.
0
|
|
|
Заблокирован
|
|
| 01.05.2014, 20:07 | |
|
MemoryStream
Если взять 500000 строк да по 17 Это сколько будет? Все данные одного формата. Ну, скажем 4 байта занимают. Ну не больше 40 мегов будет поток. Браузер больше памяти жрёт. Ну а с выводом тут уж надо посмотреть. Подходов море. Только я не понял... Всего 17 строк и огроменная куча колонок? Или 17 колонок и огроменая куча строк? Как вообще такие длинные строки просматривать?
1
|
|
|
3944 / 1869 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
|
|
| 01.05.2014, 20:17 | |
|
Мне кажется что использовать MemoryStream или динамический массив - разницы практически нет. Ну а проблема у него была в зависании при загрузке всех данных в StringGrid. Поэтому он хотел работать через файл.
0
|
|
|
Заблокирован
|
|
| 02.05.2014, 16:44 | |
|
Одиночка,
Давай слёту, не задумываясь, скажи каким образом сохранить массив в файл. Без посредников. Добавлено через 6 минут Фигнёй он занимается... Из нескольких миллионов чисел, выдранных из текста, найти все комбинации, причем разной длины, для получения определённой суммы... А потом найти несколько необходимых через Excel. Это не одну сотню лет займёт, на компе, который виснет от нехватки памяти... Я уже встречал одного человека, который этим занимается. Но это было давно. Может это он и есть?
0
|
|
| 02.05.2014, 16:44 | |
|
Считать массив из файла, записать результаты в другой файл Распарсить строку и записать данные в массив
Записать результаты в файл
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Был там один разговор по поводу свободы в материальном мире.
kumehtar 19.08.2026
Суть: рассматривается живое существо, оказавшееся внутри довольно странной системы (этого мира) и пытающееся обустроить в ней свой кусок пространства.
Жизнь действительно предъявляет каждому. . .
|
Когда логика программы не спасает от человеческих ошибок
Maks 18.08.2026
В последнее время всё чаще и чаще сталкиваюсь с таким явлением, как абсолютная невнимательность (или глупость) пользователей. Проявляется это чаще всего на работе в коллективе. Допустим, человек с. . .
|
Лето уходит
kumehtar 17.08.2026
|
Мысли в слух
kumehtar 17.08.2026
Забавно, насколько сейчас стала доступна информация. Например о магии, духовном развитии, медитациях, и других подобных направлениях, ранее зачастую тайных, передаваемых от учителя к ученику. Хотя. . .
|
|
Перемещение строк из ТЧ в другой документ с учетом текущего пробега
Maks 17.08.2026
Реализация из решения ниже выполнена на примере нетипового документа "Автозапчасти", с ТЧ "Шины".
За основу взят алгоритм отсюда: https:/ / www. cyberforum. ru/ blogs/ 359708/ 10838. html
Задача: . . .
|
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
|
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет:
1. Использовать системное время и дату,
2. Есть возможность вводить время и дату вручную.
3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
|
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber.
Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
|