:: Visual Foxpro, Foxpro for DOS
Преобразование строки Help!
Den_Lamer

Сообщений: 160
Откуда: Россия
Дата регистрации: 05.09.2004
Есть строка Никитин Денис Викторович, как из этой строки сделать строку Никитин Д.В.
Ratings: 0 negative/0 positive
Re: Преобразование строки Help!
Влад Колосов
Автор

Сообщений: 22664
Откуда: Ростов-на-Дону
Дата регистрации: 05.05.2005
Задача - три поля ввода фамилия, имя, отчество.
Необходимо фамилию превратить в ФИО с инициалами и точками и расставить заглавные буквы
независимо от регистра ввода, при этом a фамилию может входить "-".

PROCEDURE Beautify_FIO
LPARAMETERS SurName, FirstName, LastName
FirstName=NVL(FirstName,'')
LastName=NVL(LastName,'')
SurName=LEFT(SurName,AT(' ',SurName)-1)
SurName=IIF('-' $ SurName, ;
UPPER(LEFT(SurName,1))+SUBSTR(LOWER(SurName),2,AT('-',SurName)-2)+'-' +;
UPPER(SUBSTR(SurName,AT('-',SurName)+1,1))+RTRIM(SUBSTR(LOWER(SurName),AT('-',SurName)+2))+' ',;
UPPER(LEFT(SurName,1))+RTRIM(SUBSTR(LOWER(SurName),2))+' ')+;
UPPER(LEFT(FirstName,1))+IIF(!EMPTY(FirstName),'.','')+UPPER(LEFT(LastName,1))+IIF(!EMPTY(LastName),'.','')
FirstName=UPPER(LEFT(FirstName,1))+SUBSTR(LOWER(FirstName),2)
LastName=UPPER(LEFT(LastName,1))+SUBSTR(LOWER(LastName),2)
RETURN SurName+'|'+FirstName+"|"+LastName
ENDPROC




------------------
Совершенство - это не тогда, когда нельзя
ничего прибавить, а тогда, когда нечего убавить.
Ratings: 0 negative/0 positive
Re: Преобразование строки Help!
Den_Lamer

Сообщений: 160
Откуда: Россия
Дата регистрации: 05.09.2004
Спасибо сейчас попробую
Ratings: 0 negative/0 positive
Re: Преобразование строки Help!
Den_Lamer

Сообщений: 160
Откуда: Россия
Дата регистрации: 05.09.2004
FirstName = 'Никитин'
LastName = 'Денис'
SurName 'Викторович'

Влад FirstName,LastName - работает,а SurName - Выдаёт Н.Д. - а должен Д.В.
Ratings: 0 negative/0 positive
Re: Преобразование строки Help!
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Hi Den_Lamer!

см. GETWORDNUM() - если фокс старый, то аналогичная функция WordNum() есть в FoxTools.fll
P.S. Идея хранить ФИО в одном поле и потом его как-то преобразовывать (например сокращать до инициалов, отделять имя и т.п.) - изначально неправильная.




------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Преобразование строки Help!
Den_Lamer

Сообщений: 160
Откуда: Россия
Дата регистрации: 05.09.2004
Спасибо Igor Korolyov это интересней вариант
Ratings: 0 negative/0 positive
Re: Преобразование строки Help!
Влад Колосов
Автор

Сообщений: 22664
Откуда: Ростов-на-Дону
Дата регистрации: 05.05.2005
такой вариант:

FirstName='сергей'
LastName='петрович'
SurName='иванов-крамской сергей петрович'
FirstName=NVL(FirstName,'')
LastName=NVL(LastName,'')
SurName=LEFT(SurName,AT(' ',SurName)-1)
SurName=IIF('-' $ SurName, ;
UPPER(LEFT(SurName,1))+SUBSTR(LOWER(SurName),2,AT('-',SurName)-2)+'-' +;
UPPER(SUBSTR(SurName,AT('-',SurName)+1,1))+RTRIM(SUBSTR(LOWER(SurName),AT('-',SurName)+2))+' ',;
UPPER(LEFT(SurName,1))+RTRIM(SUBSTR(LOWER(SurName),2))+' ')+;
UPPER(LEFT(FirstName,1))+IIF(!EMPTY(FirstName),'.','')+UPPER(LEFT(LastName,1))+IIF(!EMPTY(LastName),'.','')
FirstName=UPPER(LEFT(FirstName,1))+SUBSTR(LOWER(FirstName),2)
LastName=UPPER(LEFT(LastName,1))+SUBSTR(LOWER(LastName),2)
? SurName
? FirstName
? LastName

Да, именно так с именами и отчествами Повырождались у них отчества

First и Last нужны во входных параметрах для случаю вызова этой процедуры из соответствующих текстбоксов.



Отредактировано (16.05.05 16:40)


------------------
Совершенство - это не тогда, когда нельзя
ничего прибавить, а тогда, когда нечего убавить.
Ratings: 0 negative/0 positive
Re: Преобразование строки Help!
ra3dct

Сообщений: 468
Откуда: nr. Moscow
Дата регистрации: 06.10.2003
Цитата:
FirstName = 'Никитин'
LastName = 'Денис'
SurName 'Викторович'

Вобще-то в английском:
first name - имя
last name - фамилия

Что касается surname, то это практически не используется, если
идет разговор о полном имени, то употребляется name.




------------------
Не в сети. VFP6 + SP5
Ratings: 0 negative/0 positive
Re: Преобразование строки Help!
venom

Сообщений: 21
Дата регистрации: 15.05.2005
Я делал так:

PROCEDURE fio
PARAMETERS nam
SCAN
np=0
j=0
mas=' '
IF !EMPTY(nam)
name=LTRIM(nam)
FOR i=1 TO LEN(nam)
IF INLI(SUBS(nam,i,1),' ','.')
IF i-np > 1
j=j+1
IF j < 3
mas(j)=SUBSTR(nam,np+1,i-np)
ELSE
mas(j)=SUBSTR(nam,np+1)
EXIT
ENDIF
ENDIF
np=i
ENDIF
ENDFOR
ENDIF
ENDSCAN
ENDPROC

Немного коряво , зато работает на все 100%




------------------
Ratings: 0 negative/0 positive
Re: Преобразование строки Help!
venom

Сообщений: 21
Дата регистрации: 15.05.2005




Отредактировано (16.05.05 16:55)


------------------
Ratings: 0 negative/0 positive
Re: Преобразование строки Help!
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Hi Den_Lamer!

Гораздо полезнее второй совет А то попадётся какой-нить господин "оглы" или "де" или ещё что-нить сложное и выйдет конфуз




------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Преобразование строки Help!
Перминов Игорь

Сообщений: 1591
Откуда: Красная Орловка
Дата регистрации: 16.09.2001
* CALL RIGHT_P (<expC1>)
* <STR_1> Строка символов
* ?RIGHT_P('Перминов Игорь Энгельсович')
* Перминов И.Э.
*
FUNCTION RIGHT_P(_str)
LOCAL i,_a,j
_str=alltrim(_str)
i=at(' ',_str)
if empty(_str) or i=0
return _str
endif
_a=substr(_str,1,i)
for j=i to len(_str)
do while empty(substr(_str,j,1))
j=j+1
enddo
_a=_a+substr(_str,j,1)+'.'
do while !empty(substr(_str,j,1))
j=j+1
enddo
endfor
return _a



Отредактировано (18.05.05 04:39)


------------------
Без коментариев..
Ratings: 0 negative/0 positive
Re: Преобразование строки Help!
Влад Колосов
Автор

Сообщений: 22664
Откуда: Ростов-на-Дону
Дата регистрации: 05.05.2005
Не указано значение перменной _sp.
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 42 (Гостей: 42)

© 2000-2024 Fox Club 
Яндекс.Метрика