我正在尝试读取CSV文件并将所有值存储在单个列表中.CSV文件包含凭据为uid(userid)和pass(密码)并用','分隔我已成功读取所有行并写入它在文件中。但是当它在文件中写入时,它将值写在“”(双引号)之间,如as(“abcdefgh3 12345678”)当我写入时,我想要实际删除此“”双引号符号到files.i我在这里粘贴我的代码:
static void Main(string[] args)
{
var reader = new StreamReader(File.OpenRead(@"C:\Desktop\userid1.csv"));
List<string> listA = new List<string>();
while (!reader.EndOfStream)
{
var line = reader.ReadLine();
var values = line.Split(',');
listA.Add(values[0]);
listA.Add(values[1]);
}
foreach (string a in listA)
{
TextWriter tr = new StreamWriter(@"E:\newfiless",true);
tr.Write(a);
tr.Write(tr.NewLine);
tr.Close();
}
}
,结果输出如下:
“UID
通“
“Martin123
123456789"
“达米安
91644"
但我希望以这种形式:
UID
通
Martin123
123456789 达米安
91644
提前感谢你们。
答案 0 :(得分:0)
原始文件显然有引号,这使它成为只有一个列的CSV文件,在该列中有两个值。不常见,但它发生了。
要实际删除引号,您可以使用Trim
,TrimEnd
或TrimStart
。
你可以在阅读时或在写作时删除引号,在这种情况下它并不重要。
var line = reader.ReadLine().Trim('"');
这将在阅读时删除引号。请注意,这假设CSV是“破损”变体。
tr.WriteLine(a.Trim('"'));
这将在写入时处理它。即使文件是“正确”的CSV,也会有两列和引号值。
请注意,您可以使用WriteLine
添加换行符,无需进行两次Write
来电。
正如其他人所评论的那样,不要在循环中为每个值创建TextWriter
,创建一次。
using (TextWriter tr = new StreamWriter(@"E:\newfiless"))
{
foreach (string a in listA)
{
tr.WriteLine(a.Trim('"'));
}
}
即使出现异常,using
也会关闭文件和其他可能的资源。
答案 1 :(得分:0)
我假设您需要读取输入文件,删除所有开始/结束引号,然后用逗号分割并将其全部写入另一个文件。您实际上可以使用SelectMany
在单行中完成它,这将生成“平坦”集合:
File.WriteAllLines(
@"c:\temp\output.txt",
File
.ReadAllLines(@"c:\temp\input.csv")
.SelectMany(line => line.Trim('"').Split(','))
);
从您的示例中,引用标记位于文件中并不十分清楚。对于典型的.CSV文件,一些以逗号分隔的字段可能会用引号括起来,以允许逗号成为内容的一部分。如果是这种情况,则解析将更加复杂。
答案 2 :(得分:-1)
您可以使用
tr.Write(a.Substring(1, line.Length - 2));
被修改
请使用修剪
tr.Write(a.TrimEnd('"').TrimStart('"'));