|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
23.09.2017, 10:12 | #1 |
Регистрация: 23.09.2017
Сообщений: 5
|
Применеие поправок для файла по времени
Всем здравия.
Задача следующая: есть исходный файл вида 8889.029 33703.950 194431 270810. 445. 8889.040 33703.912 194444 270810. 443. 8889.049 33703.872 194457 270810. 445. ... где 3-й столбец время, 4-й - дата, а 5-ый величина, которую надо поправить есть второй файл вида 23,00,26,08,2010,3.00 00,00,27,08,2010,4.07 01,00,27,08,2010,1.11 ... где 1-е поле - час, 2-е - минуты, 3-е число, 4-е мес 5-е год, 6-е - поправка, которую надо применить к пятому столбцу первого файла. Оба файла имеют данные за недели-месяцы. Не могу понять алгоритм как мне добиться применения поправок к исходному файлу. Подскажите, пожалуйста, как легче всего решить задачу. Delphi. Спасибо! Последний раз редактировалось navprog; 23.09.2017 в 11:08. |
23.09.2017, 14:49 | #2 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,238
|
а как связаны первый файл и второй?
вот, например, Вы же привели содержимое файлов ДО изменения. покажите, какие строчки, как именно (и почему они и именно так) должны измениться. приведите их после коррекции. p.s. я думаю, что я смог бы помочь Вам с кодом на Delphi, но, честно говоря, задачка не элементарная (достаточно много будет рутины по парсингу/конвертации). Это, конечно, только в том случае, если понятно, как связаны файлы! |
24.09.2017, 04:12 | #3 |
Регистрация: 23.09.2017
Сообщений: 5
|
Первый файл содержит "сырые данные", которые надо поправить значениями из второго файла, связь между ними по дате/времени. Я закинул архив, там 3 файла за сутки, 1-й с "сырыми" данными, второй - с поправками и третий - с результатом.
Мне приходит на ум, что при считывании строки с первого файла, надо открывать весь второй файл и искать совпадение по дате и времени, проверять, что значения второго файла находятся в диапазоне значений первого, применять поправку, и так на каждую запись первого. Но это громоздко что ли, не знаю как назвать, и я думаю есть более простой и эффективный метод. |
24.09.2017, 04:34 | #4 |
Регистрация: 23.09.2017
Сообщений: 5
|
Смысл второго файла: допустим первая, вторая и третья строки
23,00,04,09,2017,4.00 23,15,04,09,2017,1.02 23,30,04,09,2017,9.03 это значит, что для первого файла все записи 5-го столбца в диапазоне по времени от 23:00:00 до 23:14:59 от 4-го сентября 17-го года должны быть исправлены на значение, равное "4,00" (т.е. к значению из первого файла должно быть прибавлено "4.00") , к записям в диапазоне от 23:15:00 до 23:29:59 надо прибавить "1,02" и так далее. Дискретность второго файла может быть любой (например, каждые 10, 15, 20 минут или каждый час), но интервал всегда постоянен. Т.е. если разница между первой и второй записью второго файла 15 минут, то и все следующие записи также идут с интервалом 15 минут Последний раз редактировалось navprog; 24.09.2017 в 07:44. |
25.09.2017, 08:39 | #5 |
Участник клуба
Регистрация: 07.12.2011
Сообщений: 1,025
|
пока без интервалов, и проверки боундов:
Код:
конец диапазона для последней строки 2ndfile.txt?
Не стесняемся, плюсуем!
Последний раз редактировалось Slym; 25.09.2017 в 08:42. |
25.09.2017, 09:29 | #6 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,238
|
Slym, жаль не могу запустить ваш код - Вы используете Delphi Xx
думаю, что он у TC всегда в отсортированном виде, можно это принять как обязательное условие работы. во, хороший вопрос. но TC утверждает, что в этом файле интервал всегда строго один и тот же. поэтому, можно считать, что последняя строчка действует время от того, что в ней указано + интервал (это разница по времени с предыдущей/предпоследней строчкой). |
25.09.2017, 12:54 | #7 |
Участник клуба
Регистрация: 07.12.2011
Сообщений: 1,025
|
немного анализа входных файлов:
судя по выходным данным нужно не складывать, а отнимать... 1 строка 1stfile.txt 6870.056 51451.774 001452 050917. 00069.2 ей соответствует 5 строка 2ndfile.txt 00,00,05,09,2017,4.07 в resultfile.txt получаем: 6870.056 51451.774 001452 050917. 00065.2 а по идее должны получить 6870.056 51451.774 001452 050917. 00065.13 resultfile.txt - не правильный? мой базовый Delphi7, но не хотел заморачиваться со Split поэтому Delphi10.2 и тупо полный перебор, хотя можно минимум вдвое убыстрить начиная поиск от предыдущей итерации Код:
Не стесняемся, плюсуем!
Последний раз редактировалось Slym; 25.09.2017 в 13:17. Причина: ЮБИЛЕЙНЫЙ ПОСТ :) |
25.09.2017, 13:24 | #8 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,238
|
|
26.09.2017, 00:49 | #9 | |
Регистрация: 23.09.2017
Сообщений: 5
|
Цитата:
Я попробывал сделать топорно: считал в динамические массивы значения второго файла при загрузке и на каждую строку первого файла проверку на совпадение. Работает, но время жрёт уйму. Код:
Код:
Сейчас буду пробовать код Slym, у меня 7-я версия Deplhi. Спасибо вам за отзывчивость и советы |
|
26.09.2017, 00:49 | #10 |
Регистрация: 23.09.2017
Сообщений: 5
|
Файлы содержат много записей, первый пишется на сутки ежесекундно, около 86000 записей, второй с поправками содержит около 3-х месяцев предрасчётов (около 5000 записей) и поэтому выполнение моего "алгоритма" занимает много время
Последний раз редактировалось navprog; 26.09.2017 в 01:01. |
|
Опции темы | Поиск в этой теме |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Создание анимированного по времени KML файла на Java | Айсулу Курмашева | Помощь студентам | 0 | 01.02.2015 17:19 |
Чтение даты и времени из файла | triest | Помощь студентам | 5 | 18.05.2011 23:33 |
Посоветуйте наиболее актуальные для нашего времени книги и программы для программирования и отладки. | Lemax25 | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 10 | 09.03.2010 17:12 |
Фиксирование времени открытия файла | eda | Microsoft Office Excel | 5 | 05.02.2009 11:52 |
Третий проект поправок, призванных учредить органы студенческого самоуправления в вузах и сузах страны. | Alar | Свободное общение | 3 | 29.03.2008 21:09 |