如何拆分和清理导入的名称字段

时间:2015-08-05 16:02:40

标签: c# .net

我最近将一个Excel工作表导入SSMS 2012,并在ASP.NET WebForms页面中使用导入的表。

我正在使用导入的表的内容并使用C#将它们放入一个permenant表中。

截至目前,我有一个全名字段,其中包含以下一些示例:

Row 1: John Doe/Jane Doe -- Issues Here (Issue 1)
Row 2: Joe Shmoe
Row 3: Vince Carter
Row 4: Ti m Curry -- Issues here (Issue 2)

我不太了解c#来解决问题1中的多个名字。我也不确定在分割之前我是否需要Trim我的名字。

这是我到目前为止所尝试的内容:

foreach (DataRow drItem in dtTable.Rows)
            {
                var tempEmployee= drItem["tempEmployee"].ToString();
                var fullName = tempEmployee.Split(' ');
                var firstName = fullName[0];
                var lastName = fullName[1];

上述代码适用于Joe SchmoeVince Carter。但对于问题1,我的结果是:

firstName = John
lastName = Doe/Jane  Doe

对于问题2,我得到:

firstName = Ti
lastName = m Curry

2 个答案:

答案 0 :(得分:0)

我不知道问题2会有解决方案。可能需要一个人将“Ti m”解释为“Tim”的拼写错误,而不是名字“Ti”和中间首字母“m” 。在这种情况下,没有什么比导入数据后的老式手动清理工作更好了。

对于问题1,您可以尝试拆分'/',然后在找到foreach (string s in original.Split('/')) { SplitTheName(s); }的每个部分上进行名称拆分。

可以类似地处理任何其他类似的多名称分隔符(;,|,等等)。此外,如果您执行original.Split(" ".ToCharArray(), StringSplitOptions.RemoveEmptyEntries),则无需首先担心修剪,因为前导空格和尾随空格将被拆分但丢弃。

我们使用的一个技巧是查看字符串中是否有逗号,如果是,则将逗号分隔并将其视为姓氏优先。否则,拆分空格并先做名字。

答案 1 :(得分:0)

不使用正则表达式来解决问题(我不知道该怎么做)并且根据您已经列出的标准,您可以尝试以下方法:

foreach(DataRow row in dtTable.Rows)
{
    var employee = row["tempEmployee"].ToString();
    var names = employee.Spit('/'); // solves issue 1
    foreach(var name in names)
    {
        var nameParts = name.Split(' ');
        string first = nameParts.TakeWhile(p => p != nameParts.Last())
                                .Aggregate((a, b) => string.Format("{0} {1}", a, b));
        string last = nameParts.Last();
    }
}

如果行中有'/'个字符,则会生成多个名称。第一个名称将是最后一个' '字符前的条目的所有部分,姓氏将是最后一个' '字符后的所有内容。因此,您的输入数据将映射如下:

  

第1行:John Doe / Jane Doe

First: John, Last: Doe
First: Jane, Last: Doe
     

第2行:Joe Shmoe

First: Joe, Last: Shmoe
     

第3行:Vince Carter

First: Vince, Last: Carter
     

第4行:Ti m Curry

First: Ti m, Last: Curry