cro-logo      
Добро пожаловать, Гость. Пожалуйста, выберите Вход

 
 
  ГлавнаяСправкаПоискВход  
 
Переключение на Главную Страницу Страниц: 1
Послать Тему Печать
Строчные и прописные буквы (Прочитано 1 980 раз)
Xorti
Опытный пользователь
***
Вне Форума



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

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

В идеале надо: Иванов Иван Иванович
Наверх
 
 
IP записан
 
Zuluss
Бета-тестер
Вне Форума


Старинный пользователь
Кронос

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

Вот простой для понимания вариант с посимвольным перебором и сравнением с предыдущим символом:
Код:
@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
 ] 


 
Наверх
 
 
IP записан
 
Mit
Опытный пользователь
***
Вне Форума


Περσεύς

Сообщений: 71
Re: Строчные и прописные буквы
Ответ #2 - 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, " ")
Наверх
 
 
IP записан
 
Zuluss
Бета-тестер
Вне Форума


Старинный пользователь
Кронос

Сообщений: 3 041
Санкт-Петербург
Re: Строчные и прописные буквы
Ответ #3 - 20.11.2020 :: 19:59:47
 
Последний вариант не учитывает разделители в виде знаков препинания. "иванов и.и."
Наверх
 
 
IP записан
 
pav3l
Пользователь
**
Вне Форума



Сообщений: 14
Re: Строчные и прописные буквы
Ответ #4 - 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;)
)

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


Περσεύς

Сообщений: 71
Re: Строчные и прописные буквы
Ответ #5 - 25.01.2021 :: 15:13:21
 
Возможно сначала текстовые записи из нужных полей преобразовать в удобочитаемый вид, а затем уж склеить в одну строку Улыбка
Наверх
 
 
IP записан
 
Zuluss
Бета-тестер
Вне Форума


Старинный пользователь
Кронос

Сообщений: 3 041
Санкт-Петербург
Re: Строчные и прописные буквы
Ответ #6 - 25.01.2021 :: 15:33:56
 
Вариантов реализации много.
При реализации по Вашему варианту непонятно кто и когда вносил изменения.
А если запись будет удалена?
Если делать историю изменений, то одним из вариантов можно рассмотреть отдельный текстовой пополняемый файл с фиксацией даты, времени, пользователя, номера поля и содержания внесенных измнений.
Наверх
 
 
IP записан
 
Переключение на Главную Страницу Страниц: 1
Послать Тему Печать