C#CSV摆脱了不需要的直径

时间:2016-07-05 07:49:36

标签: c# csv

您好我有这个问题,希望您能帮助我。

我有一个 CSV文件,并且有这样的行。

Username|||Password||Email   (thats the header)

tUser1|||||asdf||temail@gmail.com

tUser2|||qwer|temali2@gmail.com

tUser3|zxcv|temail3@gmail.com

我需要摆脱行中不必要的| ......

得到这样的东西:

Username|Password|Email   
tUser1|asdf|temail@gmail.com
tUser2|qwer|temali2@gmail.com
tUser3|zxcv|temail3@gmail.com

3 个答案:

答案 0 :(得分:2)

您可以先split字符串,然后join返回

foreach(string line in lines)//or while(!sr.EndOfStream) depends on how you iterate each line
{
    string[] x = line.Split('|');
    string show = string.Join("|", x.Where(s => !string.IsNullOrEmpty(s)));
}

答案 1 :(得分:1)

使用string.SplitHere on MSDN)并指定StringSplitOptions.RemoveEmptyEntries作为第二个参数。这将返回一个数组,其中包含您拆分的字符串的非空分隔值。所以你会看到像

这样的东西
string[] parsedLine = thisLine
  .Split(new char[] {'|'}, StringSplitOptions.RemoveEmptyEntries);

如果你的行符合你的示例,parsedLine[0]将包含用户名,parsedLine[1]他们的密码和parsedLine[2]他们的电子邮件地址。

答案 2 :(得分:1)

另一种方法是使用正则表达式,只需要一个简单的直接模式@"\|{2,}"(两个或多个“|”)替换为单个"|"

  String source = @"tUser1|||||asdf||temail@gmail.com";

  // "tUser1|asdf|temail@gmail.com"
  String result = Regex.Replace(source, @"\|{2,}", "|");

对于整个文件:

 var data = File
   .ReadLines(@"C:\MyFile.txt")
   .Select(line => Regex.Replace(line, @"\|{2,}", "|"));

 File.WriteAllLines(@"C:\MyClearedFile.txt", data);