Разбиение текста на столбцы с помощью функций

Автор RuMech, 13 марта 2019, 07:55

0 Пользователи и 1 гость просматривают эту тему.

RuMech

Добрый день, есть текст такого вида: 1 год 5 месяцев 12 дней. Как с помощью функций зделать так, чтобы только цифры (каждая в отдельном) остались в отдельных столбцах?

bigor

#1
для лет
=VALUE((TRIM(LEFT(A1;FIND("год";A1 ;1)-1))))
для месяцев
=VALUE(TRIM(MID(A1;FIND("год";A1;1)+4;2)))
для дней
=VALUE(TRIM(MID(A1;FIND("дней";A1;1)-3;2)))

но это, если между словами и цифрами по одному пробелу стоит.
ps в общем понял, что к названию периодов привязаться не получится
Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

mikekaganski

#2
В LO 6.2+:
=REGEX(A1;"[^\d]+";"|";"g")
а затем к полученному столбцу применить функцию ДанныеТекст по столбцам... и указать | в качестве разделителя столбцов.

Ну, или
=VALUE(REGEX(A1;"^[^\d]*(\d*).*";"$1"))
=VALUE(REGEX(A1;"^[^\d]*\d*.[^\d]+(\d*).*";"$1"))
=VALUE(REGEX(A1;"^[^\d]*\d*.[^\d]+\d*.[^\d]+(\d*).*";"$1"))
С уважением,
Михаил Каганский

JohnSUN

Ну, если с Данные→Текст по столбцам..., то и REGEX() не нужен
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

mikekaganski

#4
Вот да! Про "скрыть" не вспомнил даже.

Но вот уверен, что сейчас окажется, что и варианты "153 года 2 дня", и "2 месяца" нужно тоже обрабатывать ;)

На этот случай:
=VALUE(IFERROR(REGEX(A1;"\d+\s*(?=г|л)");0))
=VALUE(IFERROR(REGEX(A1;"\d+\s*(?=м)");0))
=VALUE(IFERROR(REGEX(A1;"\d+\s*(?=д)");0))
С уважением,
Михаил Каганский

RuMech

Добрый день. Получилось выделить цифры по отдельным столбцам с помощью функций:
для года     LEFT(A1;2);
для месяца MID(A1;SEARCH(" ";A1;1)+5;SEARCH(" ";A1));
для дня      MID(AN17;SEARCH(" ";AN17;1)+12;SEARCH(" ";AN17))
из этой формулы MID(A1;SEARCH(" ";A1)+1;SEARCH(" ";A1;SEARCH(" ";A1)+1)-SEARCH(" ";A1)), взятой из интернета, для выделения из ФИО отчества.

bigor

#6
Вы наступили на мои грабли :) попробуйте двухзначный год и однозначный месяц(20 лет 5 месяцев), а дни ваша формула  показывает, если только период "месяц", но чаще бывает "месяцев"
Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

mikekaganski

#7
:) Если всё так однозначно (годы не более чем двузначные; нет дат без годов, месяцев и дней - ну вот никогда не бывает, чтобы всего 3 дня или там 4 месяца; строго один пробел везде; никаких "мес." и "г." и т.д.) - можно находить позиции по пробелам (для начала числа месяцев - поиском пробела с позиции 6, поскольку там либо уже этот пробел, либо ещё часть слова "год" в разных ипостасях; для начала числа дней - с позиции 14) и читать *после* найденного пробела 2 символа в расчёте на обязательный пробел после...
=LEFT(A1;2)
=MID(A1;SEARCH(" ";A1;6)+1;2)
=MID(A1;SEARCH(" ";A1;14)+1;2)
С уважением,
Михаил Каганский

RuMech

Сделал как посоветовал JohnSUN ещё вчера, функцию REGEX мой ОпенОфис не поддерживает. Спасибо за ответы.
PS: А может через регулярные выражения (не силён), или по пробелам (их всегда одно и тоже количество) текст всегда такого вида: Х (ХХ) год(а) или (лет) Х (ХХ) мес. Х (ХХ) дн.? :roll:

RuMech

Добрый день, формулы от mikekaganski отрабатывает на ура, при условии что год двухзначное число. Ещё раз спасибо. Тема закрыта.