|
Прочесть текстовый файл | ☑ | ||
---|---|---|---|---|
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), отдельно фиксируется событие "Доступ" - это когда приложили карточку, и собственно "Проход" - это когда крутанули турникет. Соответственно и на вход/выход через один турникет должны быть два разных события прохода.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |