![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Смена типа на ходу [D6]
zorik © (2009-02-04 12:25:00)Имеется TMyList = class(TObjectList) и элементы в нем типа TMyItem. Также есть типы TMyItem1 = class(TMyItem) и TMyItem2 = class(TMyItem).
Нужно считать данные из файла "общий список" и заполнить ими TMyList. Потом считать данные из "параметры списка 1", найти в TMyList соответствующий елемент и как-то "изменить ему тип" из TMyItem на TMyItem1, чтоб присвоить доп. свойста которых нет в TMyItem. Тоже надо сделать с файлом "параметры списка 2". Те елементы которые не будут ни в "параметры списка 1" ни "параметры списка 2", но считаются с "общий список" надо добавить в лог и удалить.
Пока приходит в голову:
1. создать временный список для считывания общего списка, а потом его перприсвоивать
2. добавлять в TMyList елементы TMyItem. При считывании "параметры списка 1"создавать TMyItem1, переприсвоить ему значения TMyItem, потом удалять из списка TMyItem и вставлять TMyItem1.
Сергей М. (2009-02-04 16:24:00) [1]
> zorik © (04.02.09 15:19) [29]
> в списке только выбранные скважины, которые нужны
Хорошо.
Проделал ты всю эту петрушку.
Что дальше ?
В след.раз при старте программы опять будешь заново строить список заново и шариться по файлам исх.данных ?
zorik (2009-02-04 15:45:00) [2]ага, и еще можно в одну ячейку несколько данных вбивать, разделенных "/" или словами писать, там где числа должны быть
Медвежонок Пятачок (2009-02-04 15:42:00) [3]я и сам было дело участвовал в качестве аутсорсера для нефтяных магнитов. Была написана некая надстройка над msproject.
Скважины там всякие, гидроразрывы пласта...
Была форма настройки параметров. Потом говорят: не хотим вводит наши хорошие параметры в ваши плохие формы, хотим параметры вводить в книгу ёкселя, а вы ее читайте.
zorik (2009-02-04 15:27:00) [4]Крутое по чаще покупается зарубежное, чем разрабатывается. Но это по хочет строгих входных данных в определенных форматах. Но у нас, входная информация хорошо если в екселе есть, а чаще на бумажке и совсем не структуризированая. Приходится выкручиватся самим. Центру по-барабану, он же ж купил крутое по.
Это лирический отступ не по этой теме. О наболевшем )))
Медвежонок Пятачок (2009-02-04 15:24:00) [5]Можно и сразу все файлы считать, но в списке только выбранные скважины, которые нужны, а в файлах все скважины что есть - нефтяные в одном, газовые в другом. Плюс, там данные о добыче за весь период, а мне надо выбирать на определенную дату.
и что мешает читать все файлы и выбирать только нужные данные?
zorik (2009-02-04 15:20:00) [6]и так в цикле по скважинах общего списка
MsGuns (2009-02-04 15:19:00) [7]>Медвежонок Пятачок © (04.02.09 12:52) [5]
>Доигрались. У нефтяных магнатов нет бабок на программста
Насколько я знаю у нефтегазконтор есть "большие" софт-подрядчики, которые разрабатывают весьма "крутое" ПО (иногда даже без кавычек крутое), которое деплоится по периферии. Но там оно не всегда "приживается" как надо либо не покрывает всех местных потребностей. Вот тогда местные и приглашают "программиста". А так как финансов на это "центр" не дает, то его зарплата обеспечивается собственными фондами, а они весьма невелики - отсюда и уровень.
zorik (2009-02-04 15:19:00) [8]Можно и сразу все файлы считать, но в списке только выбранные скважины, которые нужны, а в файлах все скважины что есть - нефтяные в одном, газовые в другом. Плюс, там данные о добыче за весь период, а мне надо выбирать на определенную дату.
Вручную алгоритм такой:
1. открываю файл общего списка. смотрю название и координаты скважины (х, у)
2. открываю нефтяной файл, ищу эту скважину. если нашел, то ищу данные на определенную дату. Нашел - записываю значения добычи нефти, газа, .... Если не нашел, то то самое с газовым файлом. Если нет ни там ни там, то лог или исключение. Если в 2-х файлах, то исключение.
3. Рисую "кружочки" добычи с цетрами в х, у и радиусом равным значениям добычи * коефициент (т.е. в масштабе). Рисуется разными цветами, заливкой и т.д. в зависимости от типа
Сергей М. (2009-02-04 14:59:00) [9]
> zorik
А можно поинтересоваться, к чему вся эта затея со списком ?
Ну, положим, сформировал ты этот список - что дальше ?
Сергей М. (2009-02-04 14:55:00) [10]
> Юрий Зотов © (04.02.09 14:24) [25]
> можно сразу грузить объекты в постоянный список
В том-то и дело, что автор и сам не знает что туда добавлять - то ли TMyItem1, то ли TMyItem2, поскольку на момент необходимости формирования "списка скважин" недостаточно инф-ции для дополнительной идентификации каждой из них.
clickmaker (2009-02-04 14:43:00) [11]> на этапе считавания координат я не знаю тип скважины (я
> их узнаю после того, как считываю другие файлы с параметрами)
>
реально непонятно. Что - шеф сказал читать файлы строго последовательно и никак иначе?
Юрий Зотов (2009-02-04 14:24:00) [12]> сабж
Поскольку TMyItem1 = class(TMyItem) и TMyItem2 = class(TMyItem), то все объекты классов TMyItem1 и TMyItem2 также являются объектами класса TMyItem. Поэтому во "временном" списке и последующем "переприсваивании типа" нет никакой необходимости - можно сразу грузить объекты в постоянный список и все легко рулится на полиморфизме.
Пример - TCollection. Этот класс знает только о типе TCollectionItem, но умеет работать с любыми его потомками даже не зная их реального типа.
Сергей М. (2009-02-04 14:14:00) [13]
> zorik
Впрочем тебе видней, ревизия бардака в нефтегазовом бизнесе - штука тонкая и опасная)
Сергей М. (2009-02-04 14:12:00) [14]
> zorik © (04.02.09 14:01) [21]
Да почему нельзя сразуформировать список конкретныхклассов ?!
Ведь информация-то для этого есть в тех самых файлах "параметры списка 1" ни "параметры списка 2" !
А если и файлов самих нет, то нафих тогда нужен этот бестолковый "общий список хрен знает каких скважин" ?
Вот как будудт доступны всеисх.данные для построения списка конкретных скважин, тогда и строй этот список)
Медвежонок Пятачок (2009-02-04 14:04:00) [15]пишем функцию, возвращающую базовый класс.
в ней открываем главный файл, читаем базовые свойства.
лезем в два оставшихся файла и уточняем, не наследники ли мы.
если нет, создаем базовый и возвращаем.
если да, то создаем сразу наследников, присваиваем свойства и тоже возвращаем.
zorik (2009-02-04 14:01:00) [16]
> Зачем сначала добавлять невесть что, а потом менять ? Какой
> в этом смысл, кроме [1] ?
чтобы добавить основные параметры (название и координаты) и сформировать список
Anatoly Podgoretsky (2009-02-04 13:58:00) [17]> () []
> 2. Тип скважины - (ХренЗнаетКакая, Нефтяная, Газовая, Нефтегазовая)
Это не ООПешно
Сергей М. (2009-02-04 13:55:00) [18]
> их узнаю после того, как считываю другие файлы с параметрами
Вот как узнаешь, так и добавляй.
Зачем сначала добавлять невесть что, а потом менять ? Какой в этом смысл, кроме [1] ?
zorik (2009-02-04 13:43:00) [19]
> clickmaker © (04.02.09 13:39) [16]
В том что на этапе считавания координат я не знаю тип скважины (я их узнаю после того, как считываю другие файлы с параметрами) и соответственно, не знаю объект какого типа добавить в список. Так вот и спрашивал, возможно ли добавить предка, а потом его расширить (изменить) на одиного из наследников.
zorik (2009-02-04 13:40:00) [20]
> Сергей М. © (04.02.09 13:15) [13]
так и было, но это не есть хорошо...
но, как-то так и сделаю. может добавлю новый тип "данные о добыче" и его наследников. На самом деле там больше данных, чем только о добыче )))