![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Время вставки строк. Нужна идея!
oleg1963lora © (2010-03-24 11:38:00)Здравствуйте Мастера!
Опять я к Вам со своими огурцами! Имеются txt-файл(ы) следующего
содержания:
Время Значение
15.03.2010 8:18 32,98893738
15.03.2010 8:31 32,77963257
15.03.2010 8:31 29,89930534
15.03.2010 8:31 26,62034416
15.03.2010 8:31 23,75000381
15.03.2010 8:31 20,82294464
15.03.2010 8:31 18,2397995
15.03.2010 8:32 16,26139832
15.03.2010 8:35 33,5317688
15.03.2010 8:35 30,3993988
15.03.2010 8:36 27,1519928
15.03.2010 8:36 23,95251846
Нужно:
1. Удалить дубли Дата+Время (вопросов нет, все работает)
2. Взять строки у которых Время по модулю 12 равно нулю (т.е. значения измерений через 12 мин.) и залить их в соответствующую ADO-табличку.
Вот со вторым вопросом огромная ЗАСАДА. Как видно из таблички ни 18 ни 31 минута по модулю не ноль. Где их взять? Добавить. Вставляю 19,20,21 и т.д пока не больше 31.
При числе записей 24 часа*60 мин = 1440 записей время добавления строк достигает 12 секунд! А файлов 8 штук. 2 минуты на 3,2 ГГцовом камне. Про заливку в таблицу просто не говорю.
Может у Вас будут какие идеи насчет 12-минутной выборки??? Ничего другого пока в голову не идет...
oldman (2010-03-24 13:53:00) [41]
> Поэтому в некоторых файлах результат регистрируется через
> секунду, а в каком-то из этих фалов видел измерение в 8:
> 31 и 15:00).
> Есть идея. Если разрыв времени больше 12 минут, то для 180-
> минутного разрыва добавить не 180 записей, а (60 мод 12)*3
> часа=15 записей.
А результаты измерений для добавляемых записей брать с потолка?
oleg1963lora (2010-03-24 13:45:00) [42]
> Вот у Вас при одном и том же времени существенно разные
> значения.
> И на каком основании и что оставлять ?
Не совсем так. Если этот файл открыть в ехеле (расширение csv-UniCod), то видно время в формате ЧЧ:мм. Однако в строке редактирования видно время в формате чч:мм:сс (измерение происходит по прерыванию прибора. Поэтому в некоторых файлах результат регистрируется через секунду, а в каком-то из этих фалов видел измерение в 8:31 и 15:00). После преобразования текста в ASCII я разбираю строки, удаляю секунды и заливаю их в TStrinList.
Есть идея. Если разрыв времени больше 12 минут, то для 180-минутного разрыва добавить не 180 записей, а (60 мод 12)*3 часа=15 записей.
Буду действовать так. Спасибо за помощь.
Jeer (2010-03-24 13:03:00) [43]
> Пожалуста посмотрите реальные файлы на
Зачем ?
Файл не заменяет постановку задачи.
Вот у Вас при одном и том же времени существенно разные значения.
И на каком основании и что оставлять ?
Задачу огласите.
oldman (2010-03-24 12:49:00) [44]
> Нужна идея!
А не выживет - сотру программу!
Классная идея!!!
:)
oleg1963lora (2010-03-24 12:37:00) [45]
> Если надо взять только строки с модулем 12, зачем добавлять
> лишние?
> Надо просто 18 и 31 игнорировать.
А заодно
while not (Time mod 12) do
ADOTable.Delete;
Может пара-тройка строк и выживет :)
А не выживет - сотру программу!
oleg1963lora (2010-03-24 12:29:00) [46]
> Надо время умножить на 120 и взять с нулевой частью
Поподробнее пожалуйста Анатолий
> А скорее всего и как всегда - неверная постановка задачи.
По моему вы очень близки к сути! Такой бред и сформулировать трудно.
Пожалуста посмотрите реальные файлы на
http://narod.ru/disk/19054457000/23-03-2010.ZIP.html
sniknik (2010-03-24 12:28:00) [47]вся "задача" решается в 1 запрос
INSERT INTO xxx SELECT DISTINCT * FROM [Текстовый документ#txt]
WHERE (Minute(Время) mod 12) = 0
правда будут "огромные ЗАСАДЫ", т.к. неизвестен движок, и другие "подробности" наверняка всплывут.
Jeer (2010-03-24 11:55:00) [48]P.S.
А скорее всего и как всегда - неверная постановка задачи.
Sha (2010-03-24 11:54:00) [49]> Может у Вас будут какие идеи
Есть одна.
Потратить 5 минут на нормальную формулировку задачи.
Jeer (2010-03-24 11:53:00) [50]
> Может у Вас будут какие идеи насчет 12-минутной выборки?
> ??
Интерполяция ( хоть линейная или сложнее ) между двумя отсчетами не кратными 12.
Это при условии "гладкости" поведения значений функции.
Anatoly Podgoretsky (2010-03-24 11:48:00) [51]> oldman (24.03.2010 11:43:01) [1]
Надо время умножить на 120 и взять с нулевой частью
Anatoly Podgoretsky (2010-03-24 11:46:00) [52]> oleg1963lora (24.03.2010 11:38:00) [0]
Что же ты такое написал, что время достигает 12 секунд, это же очень постараться нужно
oldman (2010-03-24 11:45:00) [53]А если и добавлять, то только 00, 12, 24, 36, 48
oldman (2010-03-24 11:43:00) [54]
> 2. Взять строки у которых Время по модулю 12 равно нулю
> (т.е. значения измерений через 12 мин.) и залить их в соответствующую
> ADO-табличку.
> Вот со вторым вопросом огромная ЗАСАДА. Как видно из таблички
> ни 18 ни 31 минута по модулю не ноль. Где их взять? Добавить.
> Вставляю 19,20,21 и т.д пока не больше 31.
Странная задача...
Если надо взять только строки с модулем 12, зачем добавлять лишние?
Надо просто 18 и 31 игнорировать.