Имя: Пароль:
1C
 
Как разделить строку
0 DenisK2020
 
09.08.22
11:13
Добрый день, подскажите начинающему программисту
Как разделить строку:
Заказ № ZX11138165 от 03.08.2022
Заказ № TR1113816545 от 05.08.2022

Отдельно получить номер заказа и отдельно дату заказа
Спасибо
1 Галахад
 
гуру
09.08.22
11:19
Методы СтрНайти, Лев, Прав, Сред.
2 Garykom
 
гуру
09.08.22
11:36
лучше СтрЗаменить() и СтрРазделить()


ИсходнаяСтрока = "Заказ № ZX11138165 от 03.08.2022";
ИсходнаяСтрока = СтрЗаменить(ИсходнаяСтрока, "Заказ № ", "");
ИсходнаяСтрока = СтрЗаменить(ИсходнаяСтрока, " от ", "|");
Массив = СтрРазделить(ИсходнаяСтрока, "|");
ЗаказНомер = Массив[0];
ЗаказДата = Массив[1];
3 Fish
 
09.08.22
11:37
(2) Главное, чтобы пробелы всегда были на месте в строке. И не по 2 :)
4 Fish
 
09.08.22
11:39
+(3) Имхо, надёжнее сначала сделать СтрРазделить по пробелу, ну а потом уже в массиве оставить только номер заказа и дату, выкинув лишнее.
5 Кирпич
 
09.08.22
11:47
Массив = СтрРазделить(ИсходнаяСтрока, " ", Ложь);
ЗаказНомер = Массив[2];
ЗаказДата = Массив[4];

Это если в номере заказа не бывает пробелов.
6 Garykom
 
гуру
09.08.22
12:04
(5) И дата не пустая
7 6awkup_true
 
09.08.22
12:20
RegExp = Новый COMОбъект("VBScript.RegExp");
RegExp.IgnoreCase = истина;
RegExp.Global = Истина;
RegExp.MultiLine = Ложь;
RegExp.Pattern = " ([^от№]*)";
Matches=RegExp.Execute("Заказ № TR1113816545 от 05.08.2022");
Номер = Matches.Item(1);
Дата = Matches.Item(2);

КонецПроцедуры
8 Kassern
 
09.08.22
12:24
(7) а ТС на линуксе и приехали))
9 Garykom
 
гуру
09.08.22
12:30
(8) в платформу скоро добавят
10 Kassern
 
09.08.22
12:40
(9) так же скоро, как поддержку sftp?)
11 Garykom
 
гуру
09.08.22
12:46
(10) поддержку sftp вряд ли добавят
в отличие от https://wonderland.v8.1c.ru/blog/podderzhka-regulyarnykh-vyrazheniy-vo-vstroennom-yazyke/
12 DenisK2020
 
09.08.22
12:48
(2) пытаюсь получить формат Дата выходит ошибка СокрЛП(Формат(Дата(ЗаказДата),"ДФ=""ггггММдд""")))
13 Fish
 
09.08.22
12:51
(12) Какой текст ошибки? Чему равна переменная ЗаказДата? Какого она типа?
14 Garykom
 
гуру
09.08.22
12:52
(12) функция Формат() она не предназначена чтобы из типа Строка сделать тип Дата
15 СеменовСемен
 
09.08.22
12:53
01.01.2001 по простому в дату не преобразуешь
16 DenisK2020
 
09.08.22
12:57
подскажите как правильно из строки теперь получить формат Дата. Спасибо
17 Garykom
 
гуру
09.08.22
13:01
18 rsv
 
09.08.22
13:01
(0) только парсингом. Т.е. без разбора символов и привязки к некоторым - никак.
Хоть в цикле.
19 mistеr
 
09.08.22
13:04
Есть такой хак: Дата("03.08.2022" + " 00:00:00")
20 Garykom
 
гуру
09.08.22
13:05
(19) эээ переставить ничего не надо местами?
21 DenisK2020
 
09.08.22
13:07
пошел путем таким пока вроде работает
Спасибо всем.

//Преобразование строки в дату
&НаСервере
Функция СтрокаВДату(Знач ДатаСтрока)
    
    ПозицияПробела = СтрНайти(ДатаСтрока, " ", НаправлениеПоиска.СНачала);
    Если ПозицияПробела > 0 Тогда
        ДатаСтрока = Лев(ДатаСтрока, ПозицияПробела - 1);
    КонецЕсли;
    ДатаСтрока = СокрЛП(СтрЗаменить(ДатаСтрока, ".", ""));
    ДатаСтрока = Сред(ДатаСтрока, 5) + Сред(ДатаСтрока, 3, 2) + Лев(ДатаСтрока, 2);
    Если СтрДлина(ДатаСтрока) = 6 Тогда
        ДатаСтрока = "20" + ДатаСтрока;
    КонецЕсли;
    
    ОписаниеТипа = Новый ОписаниеТипов("Дата");
    Результат    = ОписаниеТипа.ПривестиЗначение(ДатаСтрока);
    
    Возврат Результат;
    
КонецФункции
22 mistеr
 
09.08.22
13:27
(20) Что?
23 Kassern
 
09.08.22
13:33
24 Garykom
 
гуру
09.08.22
13:45
(23) прикольно интересно когда это добавили
25 RomanYS
 
09.08.22
13:46
(24) в 8.0 приблизительно)
26 Kassern
 
09.08.22
13:46
(24) видимо, когда разрабам надоело каждый раз переворачивать дату, но в СП почему-то решили об этом умолчать)
27 RomanYS
 
09.08.22
13:57
(26) почему умолчать?
"Строка должна содержать дату в локальном формате даты или в каноническом виде YYYYMMDDHHMMSS."

Под локальным понимается представление даты по-умолчанию в соответствии с региональными настройками, т.е. (23).
28 Garykom
 
гуру
09.08.22
14:24
(25)(27) Ааа понял почему я никогда не юзал
Ибо словил глюк на серверах где настройки даты были не того
29 Garykom
 
гуру
09.08.22
14:24
(28)+ Всегда привожу к каноническому "20220803"