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-минутной выборки??? Ничего другого пока в голову не идет...


oleg1963lora   (2010-03-24 16:04:00) [21]


> Создать таблицу контрольных точек, через 12 минут или через
> сколько надо.

А вот это уже интересно! Я сам сейчас этот вариант обдумываю, уже шестерни в голове срываются.
Берем первое время - 9:34
Берем второе время - 9:46
Надо ли между ними вставлять строку? 46-34=12, Только к модулю это никакого отношения не имеет(совпадение), и как из этого получить требуемое 9:36?
А если 9:34 и 9:37???

Тихо-тихо, чуть дыша, крыша едет неспеша


Sergey13   (2010-03-24 15:49:00) [22]

> [29] oleg1963lora   (24.03.10 15:41)
> Microsoft.Jet.OLEDB.4.0

Тогда чуть сложнее.
Создать таблицу контрольных точек, через 12 минут или через сколько надо. В каждой точке прописать время минимум и время максимум.
Заливать весь файл без разбора в БД в отдельную табличку. Далее из нее по соответствию контрольным точкам - одним запросом в рабочую таблицу. Ну и на последок транкейтнуть исходную освободив ее под следующий файл.
Как вариант.


oleg1963lora   (2010-03-24 15:45:00) [23]


> В моем предложении препроцессор встроенный. 8-)

Это на который шляпу одевают? :-))


oleg1963lora   (2010-03-24 15:44:00) [24]


> Ему нужен препроцессор перед заливкой.

Именно Сергей! Чтобы не маяться еще и с ключами. И залить 120*8 записей, а не 1600*8!


Sergey13   (2010-03-24 15:41:00) [25]

> [28] Jeer ©   (24.03.10 15:33)

В моем предложении препроцессор встроенный. 8-)


oleg1963lora   (2010-03-24 15:41:00) [26]


> А какая у тебя СУБД?

Microsoft.Jet.OLEDB.4.0 если я правильно понял вопрос.
Совокуплять эти файлы я не хочу, хай сами совокупляются.
Эти же файлы - бабочки однодневки,они каждые сутки разные (одни имена файлов чего стоят: tmp971.csv-tmp978.csv), их надо разобрать, залить в базы и удалить. Создать запрос к этим таблицам, предоставить их пользователю, по желанию пользователя сохранить в архиве, в конце месяца подготовить отчет в бумажном и электронном формате, и удалить уже таблицы из БД. Вернуться в начало данного абзаца
Опять же в группе каждый файл хоть немного, но отличается от других. Посмотри сам.


Jeer   (2010-03-24 15:33:00) [27]


> Sergey13 ©   (24.03.10 15:21) [27]


Ему нужен препроцессор перед заливкой.


Sergey13   (2010-03-24 15:21:00) [28]

> [26] oleg1963lora   (24.03.10 14:49)

А какая у тебя СУБД?
Если ФБ/ИБ, то может попробовать присовокупить твой файл к базе как внешнюю таблицу и залить из нее сразу одним запросом в постоянную.


oleg1963lora   (2010-03-24 14:49:00) [29]


> 1. Не вижу никаких проблем распарсить данный формат.

И я не вижу. Накидал тут процедурку, которая не рапарсивает строки, а РАСПАРИВАЕТ (как в бане)

procedure ParString(ParS : string; ParCode : char;Var List : TStringList);
var
   MyList1 : TStringList;
   MyList2 : TStringList;
   MyString : string;
   F           : text;

var BufS : string;
   i    : integer;
begin
   while Pos(ParCode,ParS)<>0  do
     begin
       i:=Pos(ParCode,ParS);
       if i >0  then
          begin
            BufS:=Copy(ParS,1,i-1);
            List.Add(BufS);
            Delete(ParS,1,i);
          end;
     end;
   List.Add(ParS);
end;

//Вызов
   MyString:='Мама мыла раму и грязные стекла';
   MyList1:=TStringList.Create;
   ParString(MyString,'и',MyList1);

//    MyList[0]='Мама мыла раму '
//    MyList[1]=' грязные стекла'
     MyList1:=Free;
//Вот собственно и все. Задав в качестве делимитера пробел, получишь
//список слов


Jeer   (2010-03-24 14:36:00) [30]

Удалено модератором


oldman   (2010-03-24 14:35:00) [31]


> oleg1963lora   (24.03.10 14:31) [22]
> Проблема в том, что при обнаружении какого-либо новшества
> пытаюсь обойти его оператором If-then


До написания алгоритма желательно продумать ВСЕ возможные варианты строк.
А то будешь переделывать до морковкиного заговения.


oldman   (2010-03-24 14:33:00) [32]


> oleg1963lora   (24.03.10 14:25) [20]


Не вижу ни одной засады.
Каждая строка имеет формат
"дата пробел время табуляция значение конецстроки"


oleg1963lora   (2010-03-24 14:31:00) [33]


> И в чем проблема?

Проблема в том, что при обнаружении какого-либо новшества пытаюсь обойти его оператором If-then, но после одного-другого приходится заново продумывать алгоритм процедуры и писать по новой. До следующего новшества. И данный пост можно читать в цикле. Условие выхода-обрыв питания компа :)


Jeer   (2010-03-24 14:28:00) [34]


> Дата отделена от времени пробелом, а значение от времени
> - табуляцией(#9), файл может начинаться пустой строкой,
> а может и нет, значение может занимать 8 позиций после запятой,
>  а может 3


1. Не вижу никаких проблем распарсить данный формат.

2. Если Вам необходимо получение  значений в заданные моменты времени ( с периодом 12 сек ) не совпадающие, в общем случае, с табличным временем, то сам бог велел делать интерполяцию.


  (2010-03-24 14:25:00) [35]

Удалено модератором


oldman   (2010-03-24 14:23:00) [36]


> Дата отделена от времени пробелом, а значение от времени
> - табуляцией(#9), файл может начинаться пустой строкой,
> а может и нет, значение может занимать 8 позиций после запятой,
>  а может 3. Каждый файл в начале имеет значение "Время"
> и "Зачение"(это поля у него так называются), значит эту
> строку тоже надо обходить.


И в чем проблема?


oleg1963lora   (2010-03-24 14:18:00) [37]

Кроме того, если взглянешь на файлы, увидишь много интересного.
Дата отделена от времени пробелом, а значение от времени - табуляцией(#9), файл может начинаться пустой строкой, а может и нет, значение может занимать 8 позиций после запятой, а может 3. Каждый файл в начале имеет значение "Время" и "Зачение"(это поля у него так называются), значит эту строку тоже надо обходить.
Это только те закономерности которые я выявил, а на что-то еще просто не нарвался. Видит Бог, взрывы на Солнце предсказывать куда как проще...


brother   (2010-03-24 14:16:00) [38]

> Если у меня в оперативке вставка строк идет 12 сек, прикинь
> скока это будет добавляться в таблицу.

что то странное ты говоришь...


oleg1963lora   (2010-03-24 14:04:00) [39]


> А результаты измерений для добавляемых записей брать с потолка?

Нет. Учитывая, что изменения климата вещь медленноизменяющаяся, можно взять средне-арифметическое значение параметра. Влажность заметно меняется минимум за 2 часа. Температура тоже. Хотя я видел здесь значение -243,90574 градуса :). Но это промах измерения (говорю как бывший метролог)

> А зачем добавлять строки в файл, если можно добавлять сразу
> в таблицу?

Если у меня в оперативке вставка строк идет 12 сек, прикинь скока это будет добавляться в таблицу.


oldman   (2010-03-24 13:55:00) [40]


> Взять строки у которых Время по модулю 12 равно нулю (т.
> е. значения измерений через 12 мин.) и залить их в соответствующую
> ADO-табличку.


А зачем добавлять строки в файл, если можно добавлять сразу в таблицу?


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

Наверх

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