将CSV文件和编写器读入文件,而不使用C#

时间:2015-07-13 05:41:29

标签: c# csv

我正在尝试读取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

提前感谢你们。

3 个答案:

答案 0 :(得分:0)

原始文件显然有引号,这使它成为只有一个列的CSV文件,在该列中有两个值。不常见,但它发生了。

要实际删除引号,您可以使用TrimTrimEndTrimStart

你可以在阅读时或在写作时删除引号,在这种情况下它并不重要。

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('"'));