我需要在列中拆分文本文件(制表符分隔)并在SQL Server中加载。问题是文件中的数据与列中的空格不一样,如下所示:
Name(Single Space)Sex(Multiple Spaces)Designation(Single Space)Salary(Multiple Spaces)
我使用以下代码来分割文件但不是根据我的需要。
for (int index = 2; index < allLines.Length; index++)
{
// split up the data line into its parts, using "|" as separator
//string[] items = allLines[index].Split(new char[] { '\t' });
string[] items = allLines[index].Split(new[] { '\t', '\n' });
cmd.Parameters["@Name"].Value = items[0];
cmd.Parameters["@GENDER"].Value = items[1];
cmd.Parameters["@CITY"].Value = items[2];
cmd.ExecuteNonQuery();
}
答案 0 :(得分:1)
Split有一个重载方法可以处理这些空条目。
string[] items = allLines[index].Split(new[] { '\t', '\n' }, StringSplitOptions.RemoveEmptyEntries);
答案 1 :(得分:1)
如果.Split
工作正常但您要添加到查询中的值有额外的空格,则可以使用String.Trim方法删除任何额外的空白区域。我会用它如下:
cmd.Parameters["@Name"].Value = items[0].Trim();
cmd.Parameters["@GENDER"].Value = items[1].Trim();
cmd.Parameters["@CITY"].Value = items[2].Trim();
答案 2 :(得分:0)
您可以使用正则表达式匹配单词(连续的字符序列),这样就可以避免分裂。
尝试以下
var items = Regex.Matches(allLines,@"\w+").OfType<Match>().Select(mt => mt.Value);
答案 3 :(得分:0)
您可以使用正则表达式替换来重复数据删除文件中的双选项卡
string data = Regex.Replace(input, "\\t+", "\t");
\t+
将匹配任何一个或多个标签的出现,并将其替换为单个标签。