|
1 / 1 / 0
Регистрация: 27.06.2020
Сообщений: 15
|
||||||
Выборочное чтение из текстового файла (числа разного формата и символы)28.06.2020, 02:11. Показов 1026. Ответов 11
Доброго времени суток!
Хотел обратиться за помощью к коллективному разуму ибо самому в голову ничего не идёт. Имеется текстовый файл - выхлоп программы анализа данных, выглядит так:
В данный момент интересуют только столбцы 3 и 9, но могут со временем понадобиться ещё пара-тройка. Сейчас (самое простое, что пришло в голову) я тупо читаю столбцы 1-9 в массив записей, а потом уж выдёргиваю оттуда нужные столбцы для анализа. Вроде всё работает. Но хотелось бы это дело как-нить оптимизировать, например, сразу читать из файла только то что нужно, т.е. произвольные столбцы. Файл текстовый и, как видно, столбцы начинаются на разных позициях в строке. Т.е. есть наверно вариант считать количество табов в строке и читать, например, после 2-го и 8-го (для столбцов 3 и 9), но похоже никакого выигрыша это не даст (+ надо вводить счётчик и т.д.). Нет ли каких-нить других вариантов? Ничего придумать уже не могу, может лучше и не сделать? .Если что - напишите словами, код я как-нить сам накидаю. Спасибо!
0
|
||||||
| 28.06.2020, 02:11 | |
|
Ответы с готовыми решениями:
11
добавление и выборочное удаление из текстового файла
Выборочное чтение данных из файла |
|
5095 / 2661 / 2355
Регистрация: 10.12.2014
Сообщений: 10,060
|
||||||
| 29.06.2020, 08:52 | ||||||
1
|
||||||
|
3053 / 1672 / 657
Регистрация: 19.03.2019
Сообщений: 5,380
|
|
| 29.06.2020, 10:52 | |
|
Copper1, Паскаль то у тебя какой? Код от JuriiMW устраивает?
0
|
|
|
1 / 1 / 0
Регистрация: 27.06.2020
Сообщений: 15
|
|
| 29.06.2020, 23:17 [ТС] | |
|
JuriiMW, mr-Crocodile, спасибо за ответы!
Я пользуюсь FreePascal, а это, как я понимаю, ABC(.NET?). Идею я вроде понимаю, только синтаксис незнакомый... Если я правильно понял, в ABC есть функция выделения слов из строки, я не уверен, что во Free тоже есть что-то готовое вроде этого. Поправьте, если я ошибаюсь, но вот что предлагается: - разбить строку на короткие строки (слова) на основе разделителей (Tab #9 и я не понял почему #32, который вроде двойка?) и писать их в короткий массив. - потом читать из массива только слова с нужным номером в строке (каждые 3-и и т.д.) и переводить их в правильный числовой формат. В принципе можно попробовать написать такую же процедуру самому. Не нужно будет открывать большой массив, я только не знаю, будет ли это работать сколько-нибудь быстрее. Добавлено через 35 минут UPD. Есть похожая штука и во FreePascal: ExtractWord. Так что можно попробовать использовать.
0
|
|
|
3053 / 1672 / 657
Регистрация: 19.03.2019
Сообщений: 5,380
|
|||||||
| 30.06.2020, 10:34 | |||||||
|
проверяй
0
|
|||||||
|
1 / 1 / 0
Регистрация: 27.06.2020
Сообщений: 15
|
||||||
| 30.06.2020, 19:18 [ТС] | ||||||
|
mr-Crocodile, спасибо!
Я с классом TSringList незнаком (да и вообще с классами), так что буду читать. Пока я сделал так:
0
|
||||||
|
1 / 1 / 0
Регистрация: 27.06.2020
Сообщений: 15
|
|
| 30.06.2020, 19:26 [ТС] | |
|
А вариант с классом TStrings чем лучше?
0
|
|
|
3053 / 1672 / 657
Регистрация: 19.03.2019
Сообщений: 5,380
|
||||
| 02.07.2020, 09:54 | ||||
|
Но в целом никаких выгод по сравнению с использованием ExtractWord я не вижу. Более того, я посмотрел исходники ExtractWord и рискну предположить, что при некоторых условиях (когда нужен один/пара столбцов из строки, где столбцов много), эта функция будет намного эффективнее, чем парсить столбцы через TString -> DelimitedText Так что - можно смело использовать ExtractWord Добавлено через 7 минут
1
|
||||
|
Модератор
10448 / 5739 / 3407
Регистрация: 17.08.2012
Сообщений: 17,460
|
|
| 04.07.2020, 01:12 | |
|
Можно изменить разделитель:
Pascal uses sysutils; //<...> begin DefaultFormatSettings.DecimalSeparator := ','; //<...> end. StrToFloat будет считать десятичным разделителем запятую. Однако, стоит заметить, что, например, readln будет по-прежнему считать десятичным разделителем разделитель, указанный в системе, то есть, возможно, точку.
2
|
|
|
1 / 1 / 0
Регистрация: 27.06.2020
Сообщений: 15
|
||||||
| 10.07.2020, 00:36 [ТС] | ||||||
|
Спасибо, всё (пока) понятно, написал, работает как хотел.
Заодно выкинул ненужную переменную MyDataRec и сделал адресацию через прямое обращение к элементам массива:
1
|
||||||
|
1 / 1 / 0
Регистрация: 27.06.2020
Сообщений: 15
|
|
| 20.07.2020, 21:21 [ТС] | |
|
Если не возражаете, ещё один вопрос.
Я думаю переписать программу с использованием TStringList и тут есть (пока) две неясных детали. 1. После того как я заполню лист строками из текстового файла, мне нужно узнать количество строк (чтобы потом инициировать динамический массив, с которым, собственно, и будут проводиться манипуляции). TStringList.Count это дело выдаст, я только хотел бы узнать - это свойство (собственно, число) генерится автоматически при изменении числа строк в листе (и хранится где-то) или будет каждый раз пересчитывать число строк по каждому запросу TStringList.Count? Просто строк может быть много. 2. Правильно ли я понимаю, что работа с массивом будет всегда быстрее, чем с TStringList? Теоретически, можно завести второй лист, записать в него что нужно и работать с ним... В массиве будут сразу double, а в листе таки текст, который надо будет гонять во float и обратно. Спасибо.
0
|
|
|
Супер-модератор
|
|||
| 25.07.2020, 16:33 | |||
|
0
|
|||
| 25.07.2020, 16:33 | |
|
Помогаю со студенческими работами здесь
12
Печать многостраничного файла разного формата Чтение из файла построчно переменных разного типа Прочитать из текстового файла символы, прибавить к их кодам 5, вывести новые символы на экран Прочитать из текстового файла символы, прибавить к их кодам 3, вывести новые символы в текстовый файл Как заменить чтение строки из консоли на чтение текстового файла? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
|
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO
Апнулись до NET10.
Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта
так и в интерактивном режиме. из сложностей - чисто функциональный подход.
Решил. . .
|
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2.
Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники".
В. . .
|
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии.
. . .
|
|
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2.
При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
|
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут.
https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc
Первый документ красиво выглядит, но без схемы.
Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
|
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере".
Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
|
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти".
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2.
В качестве источника данных. . .
|