Имя: Пароль:
1C
1С v8
найти часть строки в строке
0 slaifer123
 
01.10.24
17:10
Добрый день, как найти слово в строке
допустим имеем строку:"Привет, сегодня 1 января 2030 года". Нужно получить в новую переменную "сегодня 1 января"
Бухгалтерия предприятия КОРП, редакция 3.0 (3.0.156.21)
1 Волшебник
 
01.10.24
17:10
Найти()
2 slaifer123
 
01.10.24
17:13
(1) так ее убрали в каком-то релизе
3 Волшебник
 
01.10.24
17:14
(2) Кто?!

Можете задействовать СтрНайти(), но Найти() благополучно существует в релизе 8.3.25.1394
4 Timon1405
 
01.10.24
17:48
регулярки же завезли, можно тестировать
Стр="Привет, сегодня 1 января 2030 года";
М = СтрНайтиПоРегулярномуВыражению(Стр,"(сегодня\s.*)\d{4}",);
Если М.ПолучитьГруппы().Количество()>0 Тогда
    Результат = М.ПолучитьГруппы()[0].Значение;
Иначе
    Результат= "";
КонецЕсли
5 Волшебник
 
02.10.24
10:13
(4) Вы забили микроскопом гвоздь.
6 Timon1405
 
02.10.24
10:53
(5) не очень понимаю какая альтернатива со стрнайти()? год же может быть любым.
7 Волшебник
 
02.10.24
10:54
(6) Задача из сабжа попросту невозможна, а Вы бросились её решать регулярками. Надо отучить автора от постановки таких задач. Вот что мы должны сделать. Регулярки тут не помогут.
8 Timon1405
 
02.10.24
11:00
(7) можно же рассматривать задачу как упражнение. парсинг даты - довольно частая задача, например в разборе платежек
9 Волшебник
 
02.10.24
11:07
(8) Ок, имеем строки:
"Привет, сегодня 1 января 2030 года"
"Привет, сегодня 29 февраля 2056 года"

Как получить даты?
10 maxab72
 
02.10.24
11:18
угу, разобрать дату в строке "Сегодня 24/10/02 в 10:00"...
11 Гена
 
02.10.24
11:20
(9) Текст между вторым и четвёртым пробелом?
12 Волшебник
 
02.10.24
11:22
(9)+ ChatGPT справился, только программный код на питоне

программный код
import re
from datetime import datetime

def parse_date_from_string(s):
    # Паттерн для поиска даты в формате "день месяц год"
    pattern = r"(\d{1,2}) (\w+) (\d{4})"
    
    # Поиск всех совпадений с паттерном
    match = re.search(pattern, s)
    
    if match:
        day, month_str, year = match.groups()
        
        # Словарь для преобразования названий месяцев на русском языке в их числовой формат
        months = {
            "января": "01", "февраля": "02", "марта": "03",
            "апреля": "04", "мая": "05", "июня": "06",
            "июля": "07", "августа": "08", "сентября": "09",
            "октября": "10", "ноября": "11", "декабря": "12"
        }
        
        # Получение числового представления месяца
        month = months.get(month_str.lower())
        
        if month:
            # Формирование даты в формате "день/месяц/год"
            date_str = f"{int(day):02}/{month}/{year}"
            try:
                # Преобразование строки в объект даты
                date_obj = datetime.strptime(date_str, "%d/%m/%Y")
                return date_obj
            except ValueError:
                return None
    return None

# Примеры использования:
print(parse_date_from_string("Привет, сегодня 1 января 2030 года"))
print(parse_date_from_string("Привет, сегодня 29 февраля 2056 года"))


Вывод:
2030-01-01 00:00:00
2056-02-29 00:00:00

13 maxab72
 
02.10.24
11:23
"Мартобря 86 числа. Между днем и ночью."
А еще народ ленится и любит сокращать: 12 янв 24
14 Волшебник
 
02.10.24
11:24
(13) Здесь нет даты.
15 butterbean
 
02.10.24
11:42
(14) чат GPT нашел в этом тексте дату "12 января 2024 года"
16 DrZombi
 
02.10.24
12:20
(2) Её убрали из помощника, а оно таки осталось там где и была.
...да в каком то релизе, (я не помню сам), оно было убрано физически, но этот релиз так быстро сменился, что мало кто что-то заметил... :)
17 Волшебник
 
02.10.24
14:10
(15) Сообщение было отредактировано
18 maxab72
 
02.10.24
14:32
(17) а можно на форуме выводить отметку, что сообщение было отредактировано, и завести поле, типа "пояснение о причинах редактирования", обязательное к заполнению? и выводить эту причину как историю внизу сообщения курсивом? и дату редактирования.
19 Мультук
 
02.10.24
14:35
P.S.
Дело было давно, но имхо всё же было

Давным давно msaccess считал, что
08/10/02 = 10.08.2022

но уже
13/10/02 = 13.10.2022


Это бага или фича?
Или я вру и уже ничего не помню?
20 Волшебник
 
02.10.24
15:17
(18) Разрешаю.
21 vbus
 
02.10.24
15:39
(9)
Упражнение 
&НаСервере
Функция НайтиДатыНаСервере(Стр)   
	Мес = Новый Структура("января,февраля,марта,апреля,мая,июня,июля,августа,сентября,октября,ноября,декабря", 1,2,3,4,5,6,7,8,9,10,11,12);
	РегВыр = "\b(\d{1,2})\s+(января|февраля|марта|апреля|мая|июня|июля|августа|сентября|октября|ноября|декабря)\s+(\d{4})\b";
	
	СтрДаты=СтрНайтиПоРегулярномуВыражению(Стр, РегВыр);
	МассивСлов = СтрНайтиВсеПоРегулярномуВыражению(СтрДаты.Значение, "\b\w+\b");  
	
	Возврат  Дата(МассивСлов[2].Значение, Мес[МассивСлов[1].Значение], МассивСлов[0].Значение);
	
КонецФункции

&НаСервере
Процедура ПоискДат()  
	Строки = Новый  Массив;	
	Строки.Добавить("Привет, сегодня 1 января 2030 года");
	Строки.Добавить("Привет, сегодня 29 февраля 2056 года");
	
	Для Каждого Стр Из Строки Цикл
		Сообщить(НайтиДатыНаСервере(Стр))
	КонецЦикла;
КонецПроцедуры


01.01.2030 0:00:00
29.02.2056 0:00:00
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший