Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

15 Декабрь 2019, 00:17 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Здесь можно поблагодарить участников форума Улыбка
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: 1   Вниз
  Печать  
Автор Тема: Разбиение текста на столбцы с помощью функций  (Прочитано 1150 раз)
0 Пользователей и 1 Гость смотрят эту тему.
RuMech
Участник
**
Offline Offline

Сообщений: 14


« Стартовое сообщение: 13 Март 2019, 07:55 »

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

Пол: Мужской
Сообщений: 775


« Ответ #1: 13 Март 2019, 09:22 »

для лет
=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 в общем понял, что к названию периодов привязаться не получится
« Последнее редактирование: 13 Март 2019, 09:55 от Bigor » Записан
mikekaganski
Мастер
*****
Offline Offline

Пол: Мужской
Расположение: Хабаровск -> Москва
Сообщений: 1 628


« Ответ #2: 13 Март 2019, 09:30 »

В 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"))
« Последнее редактирование: 13 Март 2019, 09:39 от mikekaganski » Записан

С уважением,
Михаил Каганский
JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

Пол: Мужской
Расположение: Киев
Сообщений: 2 764


Помогаю людям и компьютерам понимать друг друга


WWW
« Ответ #3: 13 Март 2019, 09:40 »

Ну, если с Данные→Текст по столбцам..., то и REGEX() не нужен


* Год-Месяц-День.png (27.8 Кб, 578x593 - просмотрено 12 раз.)
Записан

Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне
mikekaganski
Мастер
*****
Offline Offline

Пол: Мужской
Расположение: Хабаровск -> Москва
Сообщений: 1 628


« Ответ #4: 13 Март 2019, 09:42 »

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

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

На этот случай:
Код:
=VALUE(IFERROR(REGEX(A1;"\d+\s*(?=г|л)");0))
Код:
=VALUE(IFERROR(REGEX(A1;"\d+\s*(?=м)");0))
Код:
=VALUE(IFERROR(REGEX(A1;"\d+\s*(?=д)");0))
« Последнее редактирование: 13 Март 2019, 10:06 от mikekaganski » Записан

С уважением,
Михаил Каганский
RuMech
Участник
**
Offline Offline

Сообщений: 14


« Ответ #5: 14 Март 2019, 08:52 »

Добрый день. Получилось выделить цифры по отдельным столбцам с помощью функций:
для года     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
Опытный пользователь
***
Offline Offline

Пол: Мужской
Сообщений: 775


« Ответ #6: 14 Март 2019, 09:28 »

Вы наступили на мои грабли Улыбка попробуйте двухзначный год и однозначный месяц(20 лет 5 месяцев), а дни ваша формула  показывает, если только период "месяц", но чаще бывает "месяцев"
« Последнее редактирование: 14 Март 2019, 09:33 от Bigor » Записан
mikekaganski
Мастер
*****
Offline Offline

Пол: Мужской
Расположение: Хабаровск -> Москва
Сообщений: 1 628


« Ответ #7: 14 Март 2019, 09:46 »

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


* даты.png (13.31 Кб, 921x396 - просмотрено 6 раз.)
« Последнее редактирование: 14 Март 2019, 10:31 от mikekaganski » Записан

С уважением,
Михаил Каганский
RuMech
Участник
**
Offline Offline

Сообщений: 14


« Ответ #8: 14 Март 2019, 11:41 »

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

Сообщений: 14


« Ответ #9: 15 Март 2019, 06:27 »

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

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!