我最近将一个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 Schmoe
和Vince Carter
。但对于问题1,我的结果是:
firstName = John
lastName = Doe/Jane Doe
对于问题2,我得到:
firstName = Ti
lastName = m Curry
答案 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