Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Время вставки строк. Нужна идея!


Страницы:   1 2 3

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 игнорировать.


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо