|
v7: Обработка даты в табличной части | ☑ | ||
---|---|---|---|---|
0
ksru
24.06.17
✎
16:27
|
Кто знает каким способом можно распознать дату в строке если она идет так "текс, 01.01.2001, текст"?
дата в таблично задается новой почти каждый |
|||
1
Сияющий Асинхраль
24.06.17
✎
16:58
|
Извратится, наверное, можно. Да и алгоритм простой, если формат фиксирован, если нет - то геморрой. Для начала, если формат фиксирован найди две точки расстояние между которыми фиксировано, а дальше проверяй две цифры После первой точки - не больше 12 и не меньше 0, цифры после второй точки - вменяемое значение года (пять цифр вряд ли пойдет), ну и по месяцу и году должна соответствовать число дней в месяце - больше единицы, меньше максимального числа дней (это без проблем можно определить имея корректную цифру месяца и года). Собсно, все...
|
|||
2
Сияющий Асинхраль
24.06.17
✎
17:00
|
Ошибочка вышла "не меньше 0" стоит читать как "не меньше 1", и во втором случае "больше единицы" надо читать как "больше нуля"
|
|||
3
vadim777
24.06.17
✎
18:45
|
Встречал парсеры для 1С, помогающие извлекать разные данные из строки.
|
|||
4
Базис
naïve
24.06.17
✎
19:06
|
RegExp
|
|||
5
ksru
24.06.17
✎
21:03
|
Типо так
Регуляр=Новый COMОбъект("VBScript.RegExp"); Стр=СтрокаТабличнойЧасти.ХарактеристикаНоменклатуры; Регуляр.Pattern="\d\d\.\d\d\.\d\d\d\d"; Регуляр.IgnoreCase=-1; Регуляр.Global=-1; Результаты = Регуляр.Execute(Стр); Для к=0 По Результаты.Count-1 Цикл Сообщить(Результаты.item(к).value); КонецЦикла; |
|||
6
ksru
24.06.17
✎
21:04
|
а если ошибочка
{Документ.ОприходованиеТоваров.Форма.ФормаДокумента.Форма(1377)}: Ошибка при вызове метода контекста (Execute) Результаты = Регуляр.Execute(Стр); по причине: Типы не совпадают (0) |
|||
7
vadim777
24.06.17
✎
21:26
|
(5) Возьму на заметку. Я говорил о парсере именно на языке 1С.
|
|||
8
ksru
24.06.17
✎
21:48
|
(7) если бы я знал как (
|
|||
9
ksru
25.06.17
✎
08:29
|
есть пример у кого-нибудь?
|
|||
10
vadim777
25.06.17
✎
08:40
|
(9) Гугл множество ссылок показывает на "1с парсинг строки".
|
|||
11
ksru
25.06.17
✎
10:39
|
а с помощью этого можно?
RegExp = Новый COMОбъект("VBScript.RegExp"); RegExp.IgnoreCase = Истина; //Игнорировать регистр RegExp.Global = Истина; //Поиск всех вхождений шаблона RegExp.MultiLine = Истина; //Многострочный режим RegExp.Pattern = "[^0-9]"; // отбор только чисел стр=RegExp.Replace(стр, ""); Сообщить(стр); |
|||
12
vadim777
25.06.17
✎
10:53
|
(11) Разрешаю
|
|||
13
ksru
25.06.17
✎
11:01
|
а как перевести такое выражение 10.10.2017 в дату?
|
|||
14
Aleksey
25.06.17
✎
11:05
|
(13) а что не так? Сложнее перевести 30.02.2017
|
|||
15
ksru
25.06.17
✎
11:07
|
(14) не получается пока
|
|||
16
ksru
25.06.17
✎
11:08
|
Преобразование значения к типу Дата не может быть выполнено
|
|||
17
NorthWind
25.06.17
✎
11:14
|
(16) проверяйте содержимое строки, скорее всего, где-то в ней мусор остался.
|
|||
18
ksru
25.06.17
✎
11:25
|
вроде все нормально
|
|||
19
ksru
25.06.17
✎
11:45
|
вот так работает 2017.10.10
|
|||
20
NorthWind
25.06.17
✎
12:28
|
(19) немного странно. Нестандартный формат даты для России.
|
|||
21
ksru
25.06.17
✎
12:54
|
как сделать если переменную нужно взять в кавычки чтоб она работала"
|
|||
22
ksru
25.06.17
✎
13:28
|
дата записывается в кавычках Дата("2001.10.10") а как быть с переменной если дата определена переменной?
|
|||
23
пипец
26.06.17
✎
14:35
|
ох ййооо
так хочешь что ли ? ляля=Дата(сокрлп(переменная)) ? |
|||
24
Масянька
26.06.17
✎
14:39
|
А можно спросить: а что в строке, которая (0)?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |