Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Поиск интервалов времени в файле Excel


Автор: dyzy 15.1.2010, 00:14
Доброго времени суток, кважаемые форумчане!

У меня к вам больщая прозьба проконсультировать меня в давольно интересном вопросе!

Исходные данные:

- имеем файл-отчет из компании фелефонной связи в формате Excel. В данном документе содержиться таблица из пяти столбцов и неогранчеснного количества строк (в моем случае 9014 строк). первый столбец - номер телефона, второй - отдел, третий - дата  совершени звонка в формате дд.мм.гг,  четвертый - время начала звонка в формате чч.мм.сс, пятый столбец - длительность звонка в секундах.  Таблица отсортирована в хронологическом порядке.

Задача заключается в следующем:

- Необходимо определить интервалы времени, когда совершались доновременно 4 звонка. (т.е. при наличии 4-х линий связи были заняты все 4). 

Выходные данные должны иметь вид: с чч.мм.сс по чч.мм.сс было занято 4 линии.

Ломаю голову над этой задачей уже 3-й день. Мое рещение имеет следующий вид:

1. Подключить файл excel к программе
2. организовать поиск в файле с условием <=
3. при условии 4 совпадений запись в массив.

Как все это сделать??? - Ума не приложу smile 

Автор: bsa 15.1.2010, 12:45
Можно файл excel преобразовать в текстовый (csv), а его уже парсить - будет гораздо проще и быстрей.
2 и 3 - дело техники.
Еще вопросы?

Автор: xvr 15.1.2010, 13:09
  •  Из Execl вытащить время звонков в виде набора диапазонов (дд.мм.гг/чч.мм.сс - дд.мм.гг/чч.мм.сс)
  •  Список интервалов преобразовать в список точек вида: (дд.мм.гг/чч.мм.сс, флаг - начало/конец интервала)
  •  Отсортировать список по дд.мм.гг/чч.мм.сс
  •  Пройти по списку, подсчитывая количество активных интервалов (if (начало) ++count; else --count;)
  •  >> Если count стал >=4 - вывести дд.мм.гг/чч.мм.сс как начало выходного интервала
  •  >> Если count стал <4 - вывести дд.мм.гг/чч.мм.сс как конец выходного интервала

Автор: dyzy 16.1.2010, 22:32
Цитата(xvr @ 15.1.2010,  13:09)

  •  Из Execl вытащить время звонков в виде набора диапазонов (дд.мм.гг/чч.мм.сс - дд.мм.гг/чч.мм.сс)
  •  Список интервалов преобразовать в список точек вида: (дд.мм.гг/чч.мм.сс, флаг - начало/конец интервала)
  •  Отсортировать список по дд.мм.гг/чч.мм.сс
  •  Пройти по списку, подсчитывая количество активных интервалов (if (начало) ++count; else --count;)
  •  >> Если count стал >=4 - вывести дд.мм.гг/чч.мм.сс как начало выходного интервала
  •  >> Если count стал <4 - вывести дд.мм.гг/чч.мм.сс как конец выходного интервала

Если б я знал как это сделать(((

Автор: zim22 16.1.2010, 22:36
Цитата(dyzy @  16.1.2010,  21:32 Найти цитируемый пост)
Если б я знал как это сделать(((

информации о том как это сделать в интернете предостаточно. было бы желание.

Автор: dyzy 16.1.2010, 22:46
Цитата(zim22 @ 16.1.2010,  22:36)
Цитата(dyzy @  16.1.2010,  21:32 Найти цитируемый пост)
Если б я знал как это сделать(((

информации о том как это сделать в интернете предостаточно. было бы желание.

В том то и проблема что информации предостаточно!!! А как преобразовать данные AnsiString формата excel ВРЕМЯ в integr?????????????????????????

Застрял!

Автор: Master01 17.1.2010, 01:15
А что не ясно? как читать Excel из программы? 
если да то посмотрите в сторону COM, есть такой компонент progid кажется - Excel.Application. - по сути это api на ексель. Через него можно делать что угодно - от загрузки и чтения файлов до изменения формата или атриабутов ячеек и запуска макросов, только вот писать макросы нельзя (только рекордом)

А вообще можете просто макрос написать. Запускаете Excel нажимаете F11 и пишете. Правда там Visual Basic - но для этих целей этого более чем достаточно.

да и вариант с csv тоже хорошо.

Автор: dyzy 17.1.2010, 01:34
Цитата(Master01 @ 17.1.2010,  01:15)
А что не ясно? как читать Excel из программы? 
если да то посмотрите в сторону COM, есть такой компонент progid кажется - Excel.Application. - по сути это api на ексель. Через него можно делать что угодно - от загрузки и чтения файлов до изменения формата или атриабутов ячеек и запуска макросов, только вот писать макросы нельзя (только рекордом)

А вообще можете просто макрос написать. Запускаете Excel нажимаете F11 и пишете. Правда там Visual Basic - но для этих целей этого более чем достаточно.

да и вариант с csv тоже хорошо.

у меня уже есть строка ansistring (точнее две строки) содержащие числа! мне нужно их сранить!
Как это сделать? подскажите пожалуйста!

Автор: xvr 17.1.2010, 11:17
Цитата(dyzy @ 17.1.2010,  01:34)
у меня уже есть строка ansistring (точнее две строки) содержащие числа! мне нужно их сранить!
Как это сделать? подскажите пожалуйста!

Код

ShortDateFormat = "dd/mm/yy";
DateSeparator = ":";
TimeSeparator = ":";
TDateTime val1(s1);
TDateTime val2(s2);
if (val1<val2) ...

Автор: dyzy 18.1.2010, 12:27
Цитата(xvr @ 17.1.2010,  11:17)
Цитата(dyzy @ 17.1.2010,  01:34)
у меня уже есть строка ansistring (точнее две строки) содержащие числа! мне нужно их сранить!
Как это сделать? подскажите пожалуйста!

Код

ShortDateFormat = "dd/mm/yy";
DateSeparator = ":";
TimeSeparator = ":";
TDateTime val1(s1);
TDateTime val2(s2);
if (val1<val2) ...

Огромнейшее СПАСИБО!!!!!!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)