|   |   | 
| 
 | Прочесть текстовый файл | ☑ | ||
|---|---|---|---|---|
| 0
    
        lirt82 13.01.20✎ 09:09 | 
        Всем привет, коллеги подскажите такая ситуация: на входе в здание офиса установлены турникеты, все сотрудники для входа и выхода используют карточки, программа которая управляет турникетами это фиксирует. Далее программа выплевывает файл *.txt, его нужно обработать в базе 1С. Вопрос каким методом 1С прочесть?
 Считается первая запись на оси времени в файле по сотруднику это вход(в течении дня может выходить, напрм, в магаз, покурить), а последняя запись по этому сотруднику на оси времени это выход, в файле рядом с ФИО есть табельный номер "0000000024" - как его можно из строки поймать? да и сами строки отделить друг от друга? пример файла ниже: 01.11.2019 7:23:10 Проход 0 Центральный вход 3 Этаж:Выход 0 10 Pertov A. 0000000024 01.11.2019 8:25:12 Доступ предоставлен 0 Центральный вход 3 Этаж:Вход 3 10 Ivanov A. 0000000165 01.11.2019 18:25:12 Проход 0 Центральный вход 3 Этаж:Вход 3 10 Ivanov A. 0000000165 01.11.2019 18:34:06 Доступ предоставлен 0 Центральный вход 3 Этаж:Выход 0 10 Pertov A. 0000000024 | |||
| 1
    
        Fish гуру 13.01.20✎ 09:14 | 
        (0) "да и сами строки отделить друг от друга?" - А в файле все данные одной строкой что ли? Без символа ПС или ВК?     | |||
| 2
    
        lirt82 13.01.20✎ 09:15 | 
        (1) не понял, пример выше
 т.е. строка запись следующая строка запись | |||
| 3
    
        HawkEye 13.01.20✎ 09:17 | 
        (0) ТабНомер = Прав(строкафайла, 10);     | |||
| 4
    
        Fish гуру 13.01.20✎ 09:17 | 
        (2) Если между строками есть разделитель, тогда читаешь стандартно: 
 ЧтениеТекста (TextReader) ПрочитатьСтроку (ReadLine) Синтаксис: ПрочитатьСтроку(<Разделитель>) Параметры: <Разделитель> (необязательный) Тип: Строка. Разделитель строк. Если не указан, то совпадает с указанным при открытии файла. Значение по умолчанию: ПС. Возвращаемое значение: Тип: Строка, Неопределено. В случае, если читаемый файл завершен, то возвращается Неопределено. Описание: Считывает строку текста, ограниченную разделителем. | |||
| 5
    
        lirt82 13.01.20✎ 09:17 | 
        (1) новая строка начинается с даты и времени, как вариант хочу предложить можно ли в начало и конец строки добавлять спец. символ
 пример {01.11.2019 7:23:10 Проход 0 Центральный вход 3 Этаж:Выход 0 10 Pertov A. 0000000024} {01.11.2019 8:25:12 Доступ предоставлен 0 Центральный вход 3 Этаж:Вход 3 10 Ivanov A. 0000000165} | |||
| 6
    
        HawkEye 13.01.20✎ 09:18 | 
        (5) кому предложить?     | |||
| 7
    
        Кирпич 13.01.20✎ 09:19 | 
        стаж 10 лет     | |||
| 8
    
        Fish гуру 13.01.20✎ 09:19 | 
        (5) Занафига это, если у тебя и так, судя по (0), строки разделены переводом строки?     | |||
| 9
    
        lirt82 13.01.20✎ 09:19 | 
        (6) тому кто выгружает из программы эти текстовые файлы     | |||
| 10
    
        Fish гуру 13.01.20✎ 09:20 | 
        (9) Посмотри, есть ли в конце строки символ ПС.     | |||
| 11
    
        lirt82 13.01.20✎ 09:20 | 
        (8) просто вариант     | |||
| 12
    
        lirt82 13.01.20✎ 09:22 | 
        (7) это называется лень использовать Синтаксис помощник)) когда можно сюда написать и получить ГОТОВЫЙ ответ:)     | |||
| 13
    
        HawkEye 13.01.20✎ 09:23 | 
        (9) т.е. ты даже не попробовал прочитать что есть?     | |||
| 14
    
        HawkEye 13.01.20✎ 09:24 | 
        (12) это не лень....     | |||
| 15
    
        ezhikofff 13.01.20✎ 09:25 | 
        да, за 10 лет можно было самому придумать и сюда выложить, а мы оценим..     | |||
| 16
    
        isa2net 13.01.20✎ 09:29 | 
        В БСП работу со строками можно посмотреть.     | |||
| 17
    
        dezss 13.01.20✎ 09:42 | 
        ОФФ. Я вот тут подумал. Надо к нику еще коэффициент цеплять. Соотношение комментов/тем юзверя. Сразу будет понятно многое)     | |||
| 18
    
        DES 13.01.20✎ 10:21 | 
        (0) сократить пробелы справа
 найти первый пробел справа с него+1 до конца строки идет табномер | |||
| 19
    
        edem911 13.01.20✎ 10:28 | 
        (0) Уходите от текстовых файлов. Большинство баз СКУД на SQL, читайте напрямую ее. Или попросите разработчиком сделать SQL для обмена. На стороне 1С обычный регистр, который заполняется Select-ом с даты последней записи из SQL СКУД.     | |||
| 20
    
        edem911 13.01.20✎ 10:35 | 
        (19) а по поиску табномера в тексте:
 
 | |||
| 21
    
        DES 13.01.20✎ 10:39 | 
        (20) нэт     | |||
| 22
    
        edem911 13.01.20✎ 10:43 | 
        (21) чего это?     | |||
| 23
    
        DES 13.01.20✎ 10:45 | 
        сред(Текст,СтрНайти(СокрП(Текст)," ",НаправлениеПоиска.СКонца)+1)     | |||
| 24
    
        DES 13.01.20✎ 10:48 | 
        если знаешь что формат табномера фиксированный то в сред() указывай длину     | |||
| 25
    
        1Сергей 13.01.20✎ 10:59 | 
        (17) Миллениалы придумали полоску под ником?     | |||
| 26
    
        dezss 13.01.20✎ 12:16 | 
        (25) Полоска не говорит о количестве тем-сообщений.     | |||
| 27
    
        Garykom гуру 13.01.20✎ 12:25 | 
        (0) Если нет разделителей отличных от " " между полями то никак.
 Потому что слетит все к чертям если изменится "Центральный вход" на "Парадная" или "2-й боковой вход" | |||
| 28
    
        Garykom гуру 13.01.20✎ 12:26 | 
        Заводить шаблоны с параметрами и ключевыми словами между ними и искать на соответствие шаблону.
 Нечто вроде RegExp только самопальное. | |||
| 29
    
        1Сергей 13.01.20✎ 12:32 | 
        (26) вроде, она зависит от этого     | |||
| 30
    
        ДенисЧ 13.01.20✎ 12:36 | 
        (29) Нет     | |||
| 31
    
        Garykom гуру 13.01.20✎ 12:39 | 
        (30) Предлагаешь добавить толщину полоски в зависимости от числа тем и флуда?
 Хм можно не сплошь утолщать а по кусочкам-периодам активности, будет прикольно и наглядно у кого больше. | |||
| 32
    
        1Сергей 13.01.20✎ 12:52 | 
        (30) там же вроде сложная формула была. не?     | |||
| 33
    
        Lama12 13.01.20✎ 13:29 | 
        (0) Даже если ты разберешь строки, то до идентификации "входов" и "выходов", очень далеко, т.к. по одному пропуску может пройти несколько человек, или зайти без пропуска могут.
 Например, при переноске тяжестей, или по принципу "забыл пропуск, пропусти". Еще вариант, человек работал в ночную смену. Его выход, по твоим правилам будет считаться входом. Так что, в (0) не полноценные данные. Если можешь попросить тех кто это делает что-то добавить, то попроси добавить идентификатор входа и выхода. | |||
| 34
    
        DES 13.01.20✎ 15:11 | 
        (33)  а чет и нечет не поможет?     | |||
| 35
    
        dezss 13.01.20✎ 15:20 | 
        (34) нет. (33) прав. Входы и выходы должны считаться отдельно. Как раз чтобы можно было бы определять несостыковки.     | |||
| 36
    
        Garykom гуру 13.01.20✎ 15:27 | 
        (35) Вход и Выход там уже отдельно, кто обратил внимание.
 Только хрен выпарсите легко и просто. | |||
| 37
    
        lirt82 02.03.20✎ 13:54 | 
        апну свою тему
 как после чтения сделать запись в файл? Процедура КнопкаВыполнитьНажатие(Кнопка) Если НЕ ЗначениеЗаполнено(ПутьКФайлу) Тогда Предупреждение("Выберите файл для загрузки!"); Возврат Иначе мСтрокФайла = Новый Массив(); Файл = Новый ЧтениеТекста(ПутьКФайлу, КодировкаТекста.ANSI); ТекСтрока = Файл.ПрочитатьСтроку(); Если ТекСтрока <> Неопределено Тогда мСтрокФайла.Добавить(ТекСтрока); КонецЕсли; Пока ТекСтрока <> Неопределено Цикл ТекСтрока = Файл.ПрочитатьСтроку(); Если ТекСтрока <> Неопределено Тогда мСтрокФайла.Добавить(ТекСтрока); КонецЕсли; КонецЦикла; Файл.Закрыть(); Если ЗначениеЗаполнено(ПутьКФайлу) Тогда ТекстовыйДокИзФайла = Новый ТекстовыйДокумент; ТекстовыйДокИзФайла.ДобавитьСтроку("@@"); ТекстовыйДокИзФайла.Записать(ПутьКФайлу, КодировкаТекста.UTF8); КонецЕсли; КонецЕсли; При таком коде запись в файл идет, но предварительно весь текст очищается:) а если сделать так: Пока ТекСтрока <> Неопределено Цикл ТекСтрока = Файл.ПрочитатьСтроку(); Если ТекСтрока <> Неопределено Тогда мСтрокФайла.Добавить(ТекСтрока); КонецЕсли; КонецЦикла; Если ЗначениеЗаполнено(ПутьКФайлу) Тогда ТекстовыйДокИзФайла = Новый ТекстовыйДокумент; ТекстовыйДокИзФайла.ДобавитьСтроку("@@"); ТекстовыйДокИзФайла.Записать(ПутьКФайлу, КодировкаТекста.UTF8); КонецЕсли; Файл.Закрыть(); КонецЕсли; тогда появляется ошибка совместного доступа к файлу. | |||
| 38
    
        lirt82 02.03.20✎ 13:57 | 
        т.е. мне нужно открыть файл, проверить содержимое, и затем сделать в нем запись отметку, что файл прочтен и закрыть.     | |||
| 39
    
        ZDenis 02.03.20✎ 16:38 | 
        (38) У тебя файл открывается для чтения. Тебе его потом надо для записи открывать. А ты же не открываешь существующий, а записываешь вместо него пустой.
 P.С. За 1.5 месяца что-то не далеко продвинулся. | |||
| 40
    
        Garykom гуру 02.03.20✎ 16:46 | 
        (39) Да он и задачу не ту решает.
 Читать файл нет никакой проблемы, вот как понять когда пришел а когда ушел это гм. Если пришел когда аппарата не работала а потом при уходе система посчитала как пришел или наоборот. | |||
| 41
    
        Злопчинский 02.03.20✎ 16:53 | 
        (35) как ты их посчитаешь отдельно? только если к турникету датчики стоят которые анализируют влево или вправо крутится/открывается.     | |||
| 42
    
        Fish гуру 02.03.20✎ 16:59 | 
        (41) Вроде в самых простых СКУД, и у ТС, судя по (0), отдельно фиксируется событие "Доступ" - это когда приложили карточку, и собственно "Проход" - это когда крутанули турникет. Соответственно и на вход/выход через один турникет должны быть два разных события прохода.     | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |