|
На входе текст, надо вернуть либо дату, либо число, как? | ☑ | ||
---|---|---|---|---|
0
RomaH
naïve
18.01.13
✎
09:41
|
На входе имею строку в виде либо даты, либо числа
"01.01.2012" или "115.5654" как правильно получить на выходе сотвествующий тип данных? число в попытку? Попытка Число(Строка); а дату? |
|||
1
shuhard
18.01.13
✎
09:42
|
(0) дата(2012,01,01)
|
|||
2
Анатолий Никитин
18.01.13
✎
09:42
|
Может быть Дата(Строка)?
|
|||
3
RomaH
naïve
18.01.13
✎
09:46
|
(2) не - исключение получается
|
|||
4
RomaH
naïve
18.01.13
✎
09:46
|
(1) это надо сначала строку привести к такому виду
а проще? а нормально число получать через попытку? |
|||
5
Юный 1С
18.01.13
✎
09:48
|
просто формат даты не тот. надо вначале преобразовать строку
"01.01.2012" в 20120101 |
|||
6
DrShad
18.01.13
✎
09:48
|
REGEXP? для выявления маски
|
|||
7
DrShad
18.01.13
✎
09:48
|
(5) вьюноша, садитесь, двойка!
|
|||
8
Юный 1С
18.01.13
✎
09:49
|
(7) почему?
|
|||
9
DrShad
18.01.13
✎
09:49
|
(8) читай параметры Дата()
|
|||
10
and2
18.01.13
✎
09:50
|
(0) 2 точки - дата
1 или 0 - число |
|||
11
RomaH
naïve
18.01.13
✎
09:51
|
(10) долго, найти, вырезать опять найти
|
|||
12
andreymongol82
18.01.13
✎
09:51
|
(8) Потому что
Параметры: <Значение> (обязательный) Тип: Строка. Исходное значение даты. Строка должна содержать дату в локальном формате даты или в каноническом виде YYYYMMDDHHMMSS. |
|||
13
MSII
18.01.13
✎
09:51
|
Если точка во входящей строке одна - это число, если больше одной - дата. Дальше понятно.
|
|||
14
and2
18.01.13
✎
09:52
|
(11) не об этом - ты сначала получи к какому типу преобразовывать, имхо
|
|||
15
samozvanec
18.01.13
✎
09:53
|
(11) про СтрЧислоВхождений() не слыхал?
|
|||
16
hhhh
18.01.13
✎
09:53
|
(3) вроде так можно
Дата(Строка + " 0:00:00") |
|||
17
samozvanec
18.01.13
✎
09:54
|
Если СтрЧислоВхождений(ТвояСтрокаНепонятноСЧем, ".") = 2 Тогда
Возврат Дата(ТвояСтрокаНепонятноСЧем + " 00:00:00"); Иначе Возврат Число(ТвояСтрокаНепонятноСЧем); КонецЕсли; |
|||
18
Юный 1С
18.01.13
✎
09:55
|
(12) Вы хотите сказать что если я напишу так:
ДатаСтрокой = "20120101"; ИскомаяДата = Дата(ДатаСтрокой); То вывалиться с ошибкой? |
|||
19
andreymongol82
18.01.13
✎
09:59
|
(18) Я хочу сказать, что не важно как строку с датой "01.01.2012" или "20120101". Поэтому учимся пользоваться справкой
|
|||
20
RomaH
naïve
18.01.13
✎
10:03
|
(15) нет :(
|
|||
21
RomaH
naïve
18.01.13
✎
10:03
|
вот так работает:
Дата(ЯчейкаТаблицы.ТекстовоеСодержимое + " 00:00:00") |
|||
22
RomaH
naïve
18.01.13
✎
10:04
|
получается:
Попытка Число(ЯчейкаТаблицы.ТекстовоеСодержимое) Исключение Попытка Дата(ЯчейкаТаблицы.ТекстовоеСодержимое + " 00:00:00") Исключение КонецПопытки КонецПопытки |
|||
23
Reset
18.01.13
✎
10:13
|
(22) А теперь посмотри (17) :)
|
|||
24
Ayvengo
29.01.13
✎
10:18
|
Чет какой-то не красивый код ... решили пойти простым путем? :D
|
|||
25
RomaH
naïve
29.01.13
✎
10:22
|
(24) предложи красивее
суть - на входе можем получить (не исключается) любую строку на выходе надо получить либо дату, либо число либо сообщение что все плохо |
|||
26
RomaH
naïve
29.01.13
✎
10:23
|
||||
27
Ayvengo
29.01.13
✎
11:18
|
(25) да я пока что сам ищу вариант поинтереснее :)
|
|||
28
Aprobator
29.01.13
✎
11:32
|
хватит на Юный 1С наезжать. Дата("20120101") отрабатывает на ура. Так что сами учимся пользоваться справкой.
Выдержка из СП ...... Дата (Date) Вариант синтаксиса: По строке Синтаксис: Дата(<Значение>) Параметры: <Значение> (обязательный) Тип: Строка. Исходное значение даты. Строка должна содержать дату в локальном формате даты или в каноническом виде YYYYMMDDHHMMSS. |
|||
29
Ayvengo
29.01.13
✎
11:33
|
(28) ну знаток, чо :D
|
|||
30
Aprobator
29.01.13
✎
11:35
|
(29) владею отладчиком и СП со словарем, только и всего )
|
|||
31
Ayvengo
29.01.13
✎
11:36
|
(30) боюсь, что этого мало :P
|
|||
32
Reset
29.01.13
✎
11:36
|
(30) Нужно еще владеть умением чиать темы ;)
|
|||
33
Reset
29.01.13
✎
11:38
|
+(32) к тому, что в (0) не "20120101", а ""01.01.2012""
+ (25) вообще утверждается что любая строка. Так что или (6) или (22) |
|||
34
Fragster
гуру
29.01.13
✎
11:44
|
вот это:
Дата(ТвояСтрокаНепонятноСЧем + " 00:00:00"); неправильно так как зависит от региональных установок |
|||
35
RomaH
naïve
29.01.13
✎
11:56
|
(34) а как уйти от региональных установок?
|
|||
36
DrShad
29.01.13
✎
11:59
|
(33) в (6) тайный скрытый навык :))))
|
|||
37
John D
29.01.13
✎
12:04
|
Лучше посимвольно разбирать. А то приедет потом в эту функцию из какого-нибудь файла запись вида, например, "22/7/11" и опаньки!
|
|||
38
Лефмихалыч
29.01.13
✎
12:06
|
Которые тут предлагают юзать метод Дата(Строка), неправы напрочь. Нельзя эту пакость использовать - она работает адски медленно, в разы медленнее, чем кодом разобрать строку на день, месяц и год, преобразовать это в число и потом использовать Дата(число, число, число).
Сомневающиеся могут сравнить замером производительности |
|||
39
DrShad
29.01.13
✎
12:10
|
(38) тут дело не в методе и скорости, а совершенно в другом
|
|||
40
Лефмихалыч
29.01.13
✎
12:12
|
(39) да ладно! это в чем же?
|
|||
41
MaxS
29.01.13
✎
12:14
|
На входе текст. Окада текст берётся? На него можно повлиять и провести в однозначный вид, понятный 1С? Если нет, то может ли поменяться формат текста? Если нет, то преобразовать текст с известным форматом в понятный для 1С формат - дело техники.
|
|||
42
DrShad
29.01.13
✎
12:20
|
(40) в том что на входе произвольный текст, а преобразовать его нужно либо в дату либо в число, а по-сему до [кодом разобрать строку на день, месяц и год, преобразовать это в число и потом использовать Дата(число, число, число)] еще дойти нужно
|
|||
43
Kreont
29.01.13
✎
12:21
|
(41)+10000, я б тоже сначала дал пинок тому прогу что дает текст непонятно какой непонятно чем заполненый :)
|
|||
44
DrShad
29.01.13
✎
12:44
|
(43) иногда его уже нет в живых :)))
|
|||
45
Reset
29.01.13
✎
12:58
|
В копилку вариантов.
Вот так можно преобразовывать без попытки:
Если из строки можно получить дату, будет получена дата, иначе, если возможно получить число, будет получено число, иначе получим Неопределено |
|||
46
Ayvengo
29.01.13
✎
13:09
|
(45) вот он красивый вариант ;) Респект ;)
|
|||
47
Aprobator
29.01.13
✎
13:27
|
(33) я собственно не по теме, а по поводу товарища из (5).
|
|||
48
Aprobator
29.01.13
✎
13:29
|
(45) интересно только "01.01.2012" взлетит ли в данном случае. Насколько я помню, дата не проходила данным способом. Все равно ее подготавливать приходилось.
|
|||
49
Reset
29.01.13
✎
13:39
|
(38)
"Сомневающиеся могут сравнить замером производительности"
Использовал цикл на 1 млн итераций Вариант "она работает адски медленно, в разы медленнее"
Вариант: "кодом разобрать строку на день, месяц и год, преобразовать это в число и потом использовать Дата(число, число, число)."
ну и до кучи
|
|||
50
Reset
29.01.13
✎
13:40
|
(48) Не взлетит, конечно. Дополнительной гибкости в форматах такой вариант не дает
|
|||
51
Reset
29.01.13
✎
13:41
|
(47) А, я просто Юный 1С как ник не воспринял. Тогда да, твой комент понятен ;)
|
|||
52
Ayvengo
29.01.13
✎
13:41
|
(49) еще условие на количество символов? :)
|
|||
53
Reset
29.01.13
✎
13:42
|
(52) Это детали, мне утверждение из (38) "в разы медленнее" показалось любопытным
|
|||
54
Ayvengo
29.01.13
✎
13:44
|
(53) ну с ним еще на долю секунд дольше делаться будет :)
|
|||
55
Aprobator
29.01.13
✎
13:47
|
(49) осталось еще проверит вариант ТипДата.ПривестиЗначение(...).
|
|||
56
Ayvengo
29.01.13
✎
13:48
|
(49) кстати в таком варианте, может все-равно вылететь ошибка, допустим месяц 13 ;) Так что вариант с перебором - это не вариант ...
|
|||
57
Aprobator
29.01.13
✎
13:49
|
Как то так я в свое время делал:
|
|||
58
Reset
29.01.13
✎
13:54
|
(55) Он заведомо медленней будет. У него плюс в том что не будет исключения при ошибке в формате.
|
|||
59
samozvanec
29.01.13
✎
13:58
|
(58) в разы медленнее?)
|
|||
60
Aprobator
29.01.13
✎
13:58
|
(58) это очевидно? )))
|
|||
61
Reset
29.01.13
✎
14:00
|
+ (58) 7,344334 сек в тех же условиях
(разумеется, создание описания типа (простого, с одной датой) - вне цикла) |
|||
62
iceman2112
29.01.13
✎
14:01
|
эх были бы регулярный варажения
|
|||
63
DrShad
29.01.13
✎
14:57
|
(62) а они есть
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |