需要拆分我的制表符分隔文件C#的数据

时间:2016-02-22 11:13:18

标签: c# split

我需要在列中拆分文本文件(制表符分隔)并在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();
}

4 个答案:

答案 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);

See Demo here

答案 3 :(得分:0)

您可以使用正则表达式替换来重复数据删除文件中的双选项卡

string data = Regex.Replace(input, "\\t+", "\t");

\t+将匹配任何一个或多个标签的出现,并将其替换为单个标签。