I wrote a name capitalization class in PowerShell and C#. Just a simple example of how I dealt with name clean up.
C#
x
110
110
1
using System;
2
using System.Globalization;
3
4
namespace Test
5
{
6
/// <summary>
7
/// Sets any string input to capitalized. User for human names.
8
/// </summary>
9
public class NormName
10
{
11
TextInfo textinfo = new CultureInfo("en-US", false).TextInfo;
12
13
private string MC(string s)
14
{
15
var a = s.Split('c', 2);
16
string aFirst = this.textinfo.ToTitleCase(a[0]).Trim();
17
string aLast = this.textinfo.ToTitleCase(a[1]).Trim();
18
string n = string.Format("{0}c{1}", aFirst, aLast);
19
20
return n;
21
}
22
23
private string SQ(string s)
24
{
25
var a = s.Split("'");
26
string aFirst = this.textinfo.ToTitleCase(a[0]).Trim();
27
string aLast = this.textinfo.ToTitleCase(a[1]).Trim();
28
string n = string.Format("{0}'{1}", aFirst, aLast);
29
30
return n;
31
}
32
33
private string HY(string s)
34
{
35
var a = s.Split("-");
36
string aFirst = a[0].Trim();
37
38
if (aFirst.StartsWith("mc")) { aFirst = this.MC(aFirst); }
39
else if (aFirst.Contains("'")) { aFirst = this.SQ(aFirst); }
40
else { aFirst = this.textinfo.ToTitleCase(aFirst); }
41
42
string aLast = a[1].Trim();
43
if (aLast.StartsWith("mc")) { aLast = this.MC(aLast); }
44
else if (aLast.Contains("'")) { aLast = this.SQ(aLast); }
45
else { aLast = this.textinfo.ToTitleCase(aLast); }
46
47
string n = string.Format("{0}-{1}", aFirst, aLast);
48
49
return n;
50
}
51
52
private string NORM(string s)
53
{
54
string n = textinfo.ToTitleCase(s);
55
return n;
56
}
57
58
public string Capitalize(string sName, bool initial = false)
59
{
60
string clean = "";
61
62
if (!string.IsNullOrEmpty(sName))
63
{
64
string prep = sName.Trim().ToLower();
65
66
if (prep.Contains("-"))
67
{
68
clean = this.HY(prep);
69
}
70
else if (prep.StartsWith("mc"))
71
{
72
clean = this.MC(prep);
73
}
74
else if (prep.Contains("'"))
75
{
76
clean = this.SQ(prep);
77
}
78
else
79
{
80
clean = textinfo.ToTitleCase(prep);
81
}
82
83
// Initial middle name
84
if (initial)
85
{
86
clean = string.Format("{0}.", prep[0].ToString().Trim().ToUpper());
87
}
88
}
89
90
return clean.Trim();
91
}
92
}
93
94
// USAGE ...
95
class Program
96
{
97
static void Main(string[] args)
98
{
99
NormName normname = new NormName();
100
101
string f = normname.Capitalize("sarah");
102
string l = normname.Capitalize("mccloud-o'leary");
103
string m = normname.Capitalize("henry", true);
104
105
string fullname = string.Format("{0}, {1} {2}", l, f, m);
106
Console.WriteLine(fullname);
107
//# McCloud-O'Leary, Sarah H.
108
}
109
}
110
}
PowerShell
xxxxxxxxxx
1
86
86
1
class NormName {
2
3
$textinfo = (Get-Culture).TextInfo
4
5
[string]MC([string]$s) {
6
$a = $s.Split('c', 2)
7
$aFirst = $this.textinfo.ToTitleCase($a[0]).Trim()
8
$aLast = $this.textinfo.ToTitleCase($a[1]).Trim()
9
10
$n = "{0}c{1}" -f $aFirst, $aLast
11
return $n
12
}
13
14
[string]SQ([string]$s) {
15
$a = $s.Split("'");
16
$aFirst = $this.textinfo.ToTitleCase($a[0]).Trim()
17
$aLast = $this.textinfo.ToTitleCase($a[1]).Trim()
18
19
$n = "{0}'{1}" -f $aFirst, $aLast
20
return $n
21
}
22
23
[string]HY([string]$s) {
24
$a = $s.Split("-")
25
$aFirst = $a[0].Trim()
26
27
if ($aFirst.StartsWith("mc")) { $aFirst = $this.MC($aFirst) }
28
elseif ($aFirst.Contains("'")) { $aFirst = $this.SQ($aFirst) }
29
else {$aFirst = $this.textinfo.ToTitleCase($aFirst)}
30
31
$aLast = $a[1].Trim()
32
33
if ($aLast.StartsWith("mc")){ $aLast = $this.MC($aLast); }
34
elseif ($aLast.Contains("'")){ $aLast = $this.SQ($aLast); }
35
else {$aLast = $this.textinfo.ToTitleCase($aLast)}
36
37
$n = "{0}-{1}" -f $aFirst, $aLast
38
return $n
39
}
40
41
[string]Capitalize([string]$sName, [bool]$initial) {
42
43
$clean = ""
44
45
if ($sName) {
46
$prep = $sName.Trim().ToLower()
47
48
# Married?
49
if ($prep.Contains("-")) {
50
$clean = $this.HY($prep)
51
}
52
elseif ($prep.StartsWith("mc")) {
53
$clean = $this.MC($prep)
54
}
55
elseif ($prep.Contains("'")) {
56
$clean = $this.SQ($prep)
57
}
58
else {
59
$clean = $this.textinfo.ToTitleCase($prep)
60
}
61
62
# Initial middle name
63
if ($initial -eq $true){
64
$clean = "{0}." -f $prep[0].ToString().Trim().ToUpper()
65
}
66
}
67
68
return $clean.Trim()
69
}
70
}
71
72
73
# USAGE...
74
CLS
75
76
$Cleaner = New-Object NormName
77
78
$First = $Cleaner.Capitalize("sarah",$false)
79
$Last = $Cleaner.Capitalize("herman-rogers",$false)
80
$Mid = $Cleaner.Capitalize("harris",$true)
81
82
$FullName = "{0}, {1} {2}" -f $Last, $First, $Mid
83
84
Write-Host $FullName
85
86
# McCloud-O'Leary, Sarah H.