Форум компании Кронос-Информ
https://www.cronos.ru/cgi-bin/YaBB2/YaBB.cgi
Конференции для пользователей >> CronosPRO: формулы >> Строчные и прописные буквы
https://www.cronos.ru/cgi-bin/YaBB2/YaBB.cgi?num=1605002902

Сообщение написано Xorti в 10.11.2020 :: 14:08:22

Заголовок: Строчные и прописные буквы
Создано Xorti в 10.11.2020 :: 14:08:22
Подскажите формулу чтобы каждое слово в строке начиналось с большой буквы.

Например имеем: ИВАНОВ ИВАН ИВАНОВИЧ
                    или  иванов иван иванович

В идеале надо: Иванов Иван Иванович

Заголовок: Re: Строчные и прописные буквы
Создано Zuluss в 10.11.2020 :: 19:56:11
Вроде простая задачка, но "в одну строчку" не получается. Вариантов достаточно много. Лучше всего использовать Lua. Можно вызывать и из формул. Интересно было попробовать REGEXPREPLACE, но оказалось, что другие функции внутри этой, с передачей захваченных значений, не работают (может не знаю как использовать).

Вот простой для понимания вариант с посимвольным перебором и сравнением с предыдущим символом:

Code (]@s:="иванов иван иванович ИВАНОВ ИВАН ИВАНОВИЧ"
@L:=LEN(@S);
@I:=1;
@os:="" // содержит итоговое значение
@prev:=""
WHILE(@I<=@L) DO
[
@curs:=SUBSTR(@s,@I,1);
     if (CHECKSYMBOL(@prev," .?!,") | @I=1) then [@curs:=UPPER(@curs)):

else [@curs:=LOWER(@curs)];
     @os:=@os<<@curs
     @prev:=@curs
@I:=@I+1      
]

 

Заголовок: Re: Строчные и прописные буквы
Создано Mit в 20.11.2020 :: 15:08:40
Тоже не одной строкой, но работает )

@str:="иванов иван иванович ИВАНОВ ИВАН ИВАНОВИЧ"
@@Upsubstr
@i := 0
@res(2) := 1
while ( @res(2) # 0 ) do
(      @res := getnext ( @str, " ", @i )
     @@Upsubstr(-1):=ULOWER (@res(1))
     @i := @res(2)
)
@ret:=CONCAT ( @@Upsubstr, " ")

Заголовок: Re: Строчные и прописные буквы
Создано Zuluss в 20.11.2020 :: 19:59:47
Последний вариант не учитывает разделители в виде знаков препинания. "иванов и.и."

Заголовок: Re: Строчные и прописные буквы
Создано pav3l в 22.01.2021 :: 14:14:59
Добрый день.
Есть база (БА) в который имеются поля ФИО (БА1), адрес (БА2),
телефон (БА3), дети (БА4),дата рождения (БА5), история измения записи (БА6).

В  множественное поле БА6 заносится какие измения по отношению к первичной записи были произведены.

Была мысль такая

@string:= БА1<<БА2<<БА3<<БА4<<БА5; //все в одну строку объеденить

if(БА6="")
then (БА6(1):=@string)

if(БА6#"")
then
(
@result:=DeleteWords(@string,БА6(1));
if(@result#"")
then(БА6(-1):=@result;)
)

это работало,если б был только текст.  но тут присутствуют номер телефона и дата рождения. Как  это обойти?? или может все загнать в какую нибудь хеш-функцию и сравнивать?

Заголовок: Re: Строчные и прописные буквы
Создано Mit в 25.01.2021 :: 15:13:21
Возможно сначала текстовые записи из нужных полей преобразовать в удобочитаемый вид, а затем уж склеить в одну строку :)

Заголовок: Re: Строчные и прописные буквы
Создано Zuluss в 25.01.2021 :: 15:33:56
Вариантов реализации много.
При реализации по Вашему варианту непонятно кто и когда вносил изменения.
А если запись будет удалена?
Если делать историю изменений, то одним из вариантов можно рассмотреть отдельный текстовой пополняемый файл с фиксацией даты, времени, пользователя, номера поля и содержания внесенных измнений.

Форум компании Кронос-Информ » Powered by YaBB 2.5.2!
YaBB © 2000-2009. Все права защищены.

Localization by mySOPROMAT.ru