首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用C#处理CSV文件中的换行符?

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

Stack Overflow用户
提问于 2009-07-24 17:52:18
回答 15查看 58.7K关注 0票数 13

我有一个在C#中转换成CSV文件的电子表格,但在处理换行符时遇到了问题。例如:

代码语言:javascript
运行
复制
"John","23","555-5555"

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

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

当我阅读CSV文件时,如果记录不是以双引号(")开头,那么错误地会有一个换行符,我必须删除它。我从互联网上有一些CSV阅读器类,但我担心它们会在换行符上失败。

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

非常感谢大家的帮助。

以下是我到目前为止所做的工作。我的记录有固定的格式,并且都以

代码语言:javascript
运行
复制
JTW;...;....;...;

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

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

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

JTW;...;...

所以我检查了

3

每行的位置。如果为true,我将写入;如果为false,我将附加到最后一项(去掉换行符)

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

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

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

下面是我的代码:

代码语言:javascript
运行
复制
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();


        }

    }
}
EN

Stack Overflow用户

发布于 2021-03-02 07:24:05

对于CSV中存在的换行符,必须有一个未闭合的左双引号。假设所有CSV单元格都必须打开和关闭双引号,只需检查是否有奇数个引号

代码语言:javascript
运行
复制
my_string.Count(c => c == '"') % 2 == 1

如果是这样的话,继续阅读,直到你得到偶数。

票数 0
EN
查看全部 15 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1179157

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档