您好我有这个问题,希望您能帮助我。
我有一个 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
答案 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.Split
(Here 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);