Local $a_Names[7] = [6, ' иваНОВ' & @CR & 'ивАн' & @LF & 'иванович ', ' Иванов Иван иЛЬИЧ', ' иванова анна - женщина ', _
' Иванов Иван - мужчина', ' иванова' & @CRLF & 'анна никитиЧНА ', ' иванова' & @TAB & 'анна Сергеевна ']
ConsoleWrite('С первой буквой отчества:' & @LF)
For $i = 1 To $a_Names[0]
ConsoleWrite($i & '. До: "' & $a_Names[$i] & '", После: "' & _FormatName($a_Names[$i]) & '"' & @LF)
Next
ConsoleWrite('-----' & @LF)
ConsoleWrite('Только фамилия и имя:' & @LF)
For $i = 1 To $a_Names[0]
ConsoleWrite($i & '. До: "' & $a_Names[$i] & '", После: "' & _FormatName($a_Names[$i], 0) & '"' & @LF)
Next
Func _FormatName($s_Name, $i_First = 1)
Local $s_Tmp, $a_Tmp, $s_New
$s_Tmp = StringStripWS(StringRegExpReplace($s_Name, '[[:space:]]', ' '), 7)
$a_Tmp = StringSplit($s_Tmp, ' ')
Switch $a_Tmp[0]
Case 1
$s_New = StringUpper(StringLeft($s_Tmp, 1)) & StringLower(StringTrimLeft($s_Tmp, 1))
Case 2
For $i = 1 To 2
$s_New &= StringUpper(StringLeft($a_Tmp[$i], 1)) & StringLower(StringTrimLeft($a_Tmp[$i], 1)) & ' '
Next
Case Else
For $i = 1 To 2
$s_New &= StringUpper(StringLeft($a_Tmp[$i], 1)) & StringLower(StringTrimLeft($a_Tmp[$i], 1)) & ' '
Next
If $i_First Then
Switch StringRight($a_Tmp[3], 3)
Case 'вич', 'ьич', 'вна', 'чна'
$s_New &= StringUpper(StringLeft($a_Tmp[3], 1))
EndSwitch
EndIf
EndSwitch
Return StringStripWS($s_New, 2)
EndFunc ;==>_FormatName