c# - 如何使用 C# 处理 CSV 文件中的换行符?

标签 c# csv

我有一个 Excel 电子表格正在用 C# 转换为 CSV 文件,但在处理换行符时遇到问题。例如:

"John","23","555-5555"

"Peter","24","555-5
555"

"Mary,"21","555-5555"

当我读取 CSV 文件时,如果记录不是以双引号 (") 开头,则会错误地出现一个换行符,我必须将其删除。我有一些来自互联网的 CSV 阅读器类,但我担心他们会在换行符上失败。

我应该如何处理这些换行符?


非常感谢大家的帮助。

这是我到目前为止所做的。我的记录格式固定,都是以

开头
JTW;...;....;...;

JTW;...;...;....

JTW;....;...;..

..;...;... (wrong record, line break inserted)

JTW;...;...

所以我在每一行的 [3] 位置检查了 ; 。如果是真的,我写;如果为假,我将追加到最后(删除换行符)

我现在遇到了问题,因为我正在将文件另存为 txt。

顺便说一句,我通过在 Excel 中另存为 csv 将 Excel 电子表格转换为 csv。但我不确定客户是否这样做。

所以文件作为TXT是完美的。我检查了记录和总数。但现在我必须将它转换回 csv,我真的很想在程序中这样做。有人知道怎么做吗?

这是我的代码:

namespace EditorCSV
{
    class Program
    {
        static void Main(string[] args)
        {
            ReadFromFile("c:\\source.csv");
        }

        static void ReadFromFile(string filename)
        {
            StreamReader SR;
            StreamWriter SW;
            SW = File.CreateText("c:\\target.csv");
            string S;
            char C='a';
            int i=0;
            SR=File.OpenText(filename);
            S=SR.ReadLine();
            SW.Write(S);
            S = SR.ReadLine();
            while(S!=null)
            {
                try { C = S[3]; }
                catch (IndexOutOfRangeException exception){
                    bool t = false;
                    while (t == false)
                    {
                        t = true;
                        S = SR.ReadLine();
                        try { C = S[3]; }
                        catch (IndexOutOfRangeException ex) { S = SR.ReadLine(); t = false; }

                    }
                }
                if( C.Equals(';'))
                {
                    SW.Write("\r\n" + S);
                    i = i + 1;
                }
                else
                {
                    SW.Write(S);

                }
                S=SR.ReadLine();
            }
            SR.Close();
            SW.Close();
            Console.WriteLine("Records Processed: " + i.ToString() + " .");
            Console.WriteLine("File Created SucacessFully");
            Console.ReadKey();


        }

    }
} 

最佳答案

CSV 有预定义的处理方式。该网站提供了一个易于阅读的标准解释 way to handle all the caveats of CSV .

然而,确实没有理由不使用可靠的开源库来读写 CSV 文件,以避免犯非标准错误。 LINQtoCSV是我最喜欢的图书馆。它支持以干净简单的方式进行读写。

或者,this SO question on CSV libraries将为您提供最受欢迎的选择列表。

关于c# - 如何使用 C# 处理 CSV 文件中的换行符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1179157/

相关文章:

c# - 使用 CSOM 创建 Project Server 2016 工作流

c# - 迁移问题 - EF 认为数据库需要更新,引用它的项目不会运行

c# - 如果我的值链接到实例的变量,我应该如何将值传递给 Controller ​​中的验证操作?

scala - 使用 Play Framework 下载 csv 文件?

c# - 将单独的列从 .csv 拉入 c# 中的单独数组

csv - Julia - 重写 CSV

python - 当 pandas 总是显示 "No such file or directory"时,如何让 pandas 读取 CSV 文件?

r - 如何将整个数据框附加到 R 中的 CSV

c# - 基数排序中的分组何时会带来优势?

javascript - 文件上传/输入文件 我无法上传 .exe 文件