|
разбор текстового файла в табличный документ | ☑ | ||
---|---|---|---|---|
0
Wefast
10.01.17
✎
09:25
|
Есть текстовый файл вида
завершение 01.01.2016 17:50:50 запуск 02.01.2016 09:00:00 завершение 02.01.2016 10:00:00 запуск 02.01.2016 10:00:50 завершение 02.01.2016 17:30:00 запуск 03.01.2016 09:00:00 завершение 03.01.2016 18:00:00 Нужен табличный документ вида | 01.01.2016 | 02.01.2016 | 03.01.2016 ЗАПУСК | | 09:00:00 | 09:00:00 ЗАВЕРШЕНИЕ| 17:50:50 | 10:00:00 | 18:00:00 ЗАПУСК | | 10:00:50 ЗАВЕРШЕНИЕ| | 17:30:00 У меня получается вот так: http://i.imgur.com/ANAv9Kq.png макет выглядит так: http://i.imgur.com/HgMsVVp.png Делаю я вот так: Табдок = новый ТабличныйДокумент; ТекОбъект = РеквизитФормыВЗначение("Объект"); Макет = ТекОбъект.ПолучитьМакет("Макет"); ОбластьОрг = Макет.ПолучитьОбласть("ШапкаОрг|Шапка"); ОбластьПК = Макет.ПолучитьОбласть("ШапкаПК"); ОбластьОрг.Параметры.Организация = "Организация"; ТабДок.Вывести(ОбластьОрг); ОбластьПК.Параметры.Номер = "1"; КолВоДней = 7; ДатаНачала = Дата("20161101"); Для н =1 по КолВоДней Цикл Обл = Макет.ПолучитьОбласть("ШапкаОрг|ОблЧисло"); Обл.Параметры.Число = Формат(ДатаНачала+(86400*н),"ДЛФ=DD"); ТабДок.Присоединить(Обл); КонецЦикла; Текст = Новый ТекстовыйДокумент; Текст.Прочитать("C:\Users\V\Desktop\m.svyatoslavka.ZAKAZ.html",КодировкаТекста.UTF8); ОблЗавШ = Макет.ПолучитьОбласть("СтрЗавершение|Шапка"); ОблЗавЧ = Макет.ПолучитьОбласть("СтрЗавершение|ОблЧисло"); ОблЗапШ = Макет.ПолучитьОбласть("СтрЗапуск|Шапка"); ОблЗапЧ = Макет.ПолучитьОбласть("СтрЗапуск|ОблЧисло"); Для НомерСтроки = -Текст.КоличествоСтрок() По -1 Цикл Стр = Текст.ПолучитьСтроку(-НомерСтроки); а= СтрНайти(Стр,"Системное время запуска операционной системы:"); б= СтрНайти(Стр,"Системное время завершения работы операционной системы: "); Если а >1 Тогда ТабДок.Вывести(ОблЗапШ); Вр = Сред(Стр,а+46,24); Рез = ""; Для н=1 По СтрДлина(вр) Цикл Если СтрНайти("0123456789",Сред(Вр,н,1)) >0 Тогда Рез = Рез + Сред(Вр,н,1); КонецЕсли; КонецЦикла; Для н= 1 по КолВоДней Цикл Если НачалоДня(Дата(Рез)) = НачалоДня(ДатаНачала+(86400*н)) Тогда ОблЗапЧ.Параметры.Запуск = Формат(Дата(Рез),"ДФ=HH:mm:ss"); КонецЕсли; ТабДок.Присоединить(ОблЗапЧ); ОблЗапЧ.Параметры.Запуск=""; КонецЦикла; КонецЕсли; Если б > 1 Тогда ТабДок.Вывести(ОблЗавШ); ВР = ""; ВР = СтрЗаменить(СтрЗаменить(СтрЗаменить(Сред(Стр,б+56,24),"-",""),"T",""),":",""); Рез = ""; Для н=1 По СтрДлина(вр) Цикл Если СтрНайти("0123456789",Сред(Вр,н,1)) >0 Тогда Рез = Рез + Сред(Вр,н,1); КонецЕсли; КонецЦикла; Для н= 1 по КолВоДней Цикл Если НачалоДня(Дата(Рез)) = НачалоДня(ДатаНачала+(86400*н)) Тогда ОблЗавЧ.Параметры.Завершение = Формат(Дата(Рез),"ДФ=HH:mm:ss"); КонецЕсли; ТабДок.Присоединить(ОблЗавЧ); ОблЗавЧ.Параметры.Завершение=""; КонецЦикла; Сообщить("Завершение:"+МестноеВремя(Рез)); КонецЕсли; КонецЦикла; Объект.ТабДок.Вывести(ТабДок); |
|||
1
Wefast
10.01.17
✎
09:51
|
Я подумывал что то вроде:
Обрабатываю первую строку. И записываю ее в ТЗ. Потом иду до след строки след дня. с тем же видом(завершение или запуск). Если нашел присоединил. И записал в ТЗ. И опять перебираю строки. Первая строка которой нет в ТЗ вывожу. Но вот как определить кол-во необходимых итераций пока не ясно. Может есть цикл перебора текстового файла который полняется пока есть еще строки? Что то вроде Пока Файл.ПрочитатьСледСтроку() Цикл И я бы просто удалял строки из файла если вывел ее. НЕ уверен конечно сохранится ли структура данных и не расползутся ли они |
|||
2
VladZ
10.01.17
✎
10:12
|
Я бы делал так:
1. Из файла загрузил в ТЗ. 2. ТЗ вывел в нужном виде. |
|||
3
VladZ
10.01.17
✎
11:17
|
+2 Пытаетесь сотрудников табелировать по времени включения/выключения компа?
|
|||
4
Рэйв
10.01.17
✎
11:45
|
(0)
1. Загрузи в тз с 3 колонками "Действие", "Дата","ДатаВремя" 2.Отсортируй по дате-времени 3. Посчитай сколько у тебя дат, выеди шапку 4. Выводи строки попорядку, сверяя с датой предыдущей строки. Как только дата изменилась присоединяй и выводи в следующей колонке. как то так... |
|||
5
DrZombi
гуру
10.01.17
✎
12:40
|
(0) Помести все в СКД, через ТЗ
|
|||
6
Wefast
10.01.17
✎
14:07
|
(3) заказчик хочет следить за удаленными точками. Кто во сколько приходит\уходит.
Сделал так Процедура Проверить() Табдок = новый ТабличныйДокумент; ТекОбъект = РеквизитФормыВЗначение("Объект"); Макет = ТекОбъект.ПолучитьМакет("Макет"); ОбластьОрг = Макет.ПолучитьОбласть("ШапкаОрг|Шапка"); ОбластьПК = Макет.ПолучитьОбласть("ШапкаПК"); ОбластьОрг.Параметры.Организация = "Сириус"; ТабДок.Вывести(ОбластьОрг); ОбластьПК.Параметры.Номер = "1"; КолВоДней = 7; ДатаНачала = Дата("20161101"); Для н =1 по КолВоДней Цикл Обл = Макет.ПолучитьОбласть("ШапкаОрг|ОблЧисло"); Обл.Параметры.Число = Формат(ДатаНачала+(86400*н),"ДЛФ=DD"); ТабДок.Присоединить(Обл); КонецЦикла; Текст = Новый ТекстовыйДокумент; Текст.Прочитать("C:\Users\V\Desktop\m.svyatoslavka.ZAKAZ.html",КодировкаТекста.UTF8); ОблЗавШ = Макет.ПолучитьОбласть("СтрЗавершение|Шапка"); ОблЗавЧ = Макет.ПолучитьОбласть("СтрЗавершение|ОблЧисло"); ОблЗапШ = Макет.ПолучитьОбласть("СтрЗапуск|Шапка"); ОблЗапЧ = Макет.ПолучитьОбласть("СтрЗапуск|ОблЧисло"); Перебор = 1; Вид = "А"; ДанныеД = ""; Пока Перебор = 1 Цикл т=1; Если Вид = "А" Тогда ТабДок.Вывести(ОблЗапШ); Иначе ТабДок.Вывести(ОблЗавШ); КонецЕсли; Для НомерСтроки = -Текст.КоличествоСтрок() По -1 Цикл Стр = Текст.ПолучитьСтроку(-НомерСтроки); а= СтрНайти(Стр,"Системное время запуска операционной системы:"); б= СтрНайти(Стр,"Системное время завершения работы операционной системы: "); Если а=0 и б=0 ТОгда Текст.УдалитьСтроку(-НомерСтроки); КонецЕсли; Если а > 1 и вид="А" Тогда Если ДанныеД = Сред(Стр,а+46,15) Тогда Продолжить; КонецЕсли; Вр = Сред(Стр,а+46,24); Рез = ""; Для н=1 По СтрДлина(вр) Цикл Если СтрНайти("0123456789",Сред(Вр,н,1)) >0 Тогда Рез = Рез + Сред(Вр,н,1); КонецЕсли; КонецЦикла; Для н= т по КолВоДней Цикл ОблЗапЧ.Параметры.Запуск=""; Если НачалоДня(Дата(Рез)) = НачалоДня(ДатаНачала+(86400*н)) Тогда ОблЗапЧ.Параметры.Запуск = Формат(Дата(Рез),"ДФ=HH:mm:ss"); ТабДок.Присоединить(ОблЗапЧ); т = н+1; Прервать; Иначе ТабДок.Присоединить(ОблЗапЧ); КонецЕсли; КонецЦикла; ДанныеТ = "а"; ДанныеД = Сред(Стр,а+46,15); Текст.УдалитьСтроку(-НомерСтроки); ВИД = "А"; ИначеЕсли А>1 И ВИД = "Б" Тогда ДанныеД = Сред(Стр,а+46,15); КонецЕсли; Если б > 1 и ВИД = "Б" Тогда Если ДанныеД = Сред(Стр,б+56,15) Тогда Продолжить; КонецЕсли; ВР = ""; ВР = Сред(Стр,б+56,24); Рез = ""; Для н=1 По СтрДлина(вр) Цикл Если СтрНайти("0123456789",Сред(Вр,н,1)) >0 Тогда Рез = Рез + Сред(Вр,н,1); КонецЕсли; КонецЦикла; Для н= т по КолВоДней Цикл ОблЗавЧ.Параметры.Завершение=""; Если НачалоДня(Дата(Рез)) = НачалоДня(ДатаНачала+(86400*н)) Тогда ОблЗавЧ.Параметры.Завершение = Формат(Дата(Рез),"ДФ=HH:mm:ss"); ТабДок.Присоединить(ОблЗавЧ); т = н+1; Прервать; Иначе ТабДок.Присоединить(ОблЗавЧ); КонецЕсли; КонецЦикла; ДанныеТ = "б"; ДанныеД = Сред(Стр,б+56,15); Текст.УдалитьСтроку(-НомерСтроки); вид = "Б"; ИначеЕсли б>1 И ВИД = "А" Тогда ДанныеД = Сред(Стр,б+56,15); КонецЕсли; КонецЦикла; ДанныеД = ""; Если Вид = "А" Тогда Вид = "Б"; Иначе ВИД = "А"; КонецЕсли; Если Текст.КоличествоСтрок() = 0 Тогда Перебор = 0; КонецЕсли; КонецЦикла; Объект.ТабДок.Вывести(ТабДок); КонецПроцедуры Вроде выводит как надо. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |