Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在单元格中使用新行字符读取CSV_C#_Csv - Fatal编程技术网

C# 在单元格中使用新行字符读取CSV

C# 在单元格中使用新行字符读取CSV,c#,csv,C#,Csv,我试图从csv读取两列,行由“;”分隔 我使用的是stram.ReadLine方法,但问题是某些单元格中的文本具有新行字符,因此,方法ReadLine将该单元格拆分为其他几个单元格,如何避免这种情况?为了简化这个模型,假设我有一个包含100行的列,但其中一些列内部有长文本和一些换行符,我如何修改它以包含100行而不是更多行 StreamReader aFile = new StreamReader("C:\\dev\\csvReplacment\\szablonDE.csv");

我试图从csv读取两列,行由“;”分隔

我使用的是
stram.ReadLine
方法,但问题是某些单元格中的文本具有新行字符,因此,方法
ReadLine
将该单元格拆分为其他几个单元格,如何避免这种情况?为了简化这个模型,假设我有一个包含100行的列,但其中一些列内部有长文本和一些换行符,我如何修改它以包含100行而不是更多行

StreamReader aFile = new StreamReader("C:\\dev\\csvReplacment\\szablonDE.csv");


            var dane = new List<string>();

            string line;

            while ((line = aFile.ReadLine()) != null)
            {
                dane.Add(line);
            }
            aFile.Close();
StreamReader aFile=newstreamreader(“C:\\dev\\csvreplacement\\szablonDE.csv”);
var dane=新列表();
弦线;
而((line=aFile.ReadLine())!=null)
{
添加(行);
}
aFile.Close();

假设
标记行尾:

    // Build your final resulting list
    List<String> dane = new List<String>();

    // use StreamReader to read the file
    using (StreamReader sr = new StreamReader(ms))
    {
        // create a string builder that we can use to store each
        // line's contents until it's ready to be added to dane
        StringBuilder builder = new StringBuilder();
        // buffer char
        Char c;
        // read the stream character by character
        while (!sr.EndOfStream)
        {
            c = (Char)sr.Read();
            // if it's `;` it's the end of a row, so add it to
            // dane and reset the line's contents
            if (c == ';')
            {
                dane.Add(builder.ToString());
                builder.Clear();
            }
            // avoid reading in superfluous whitespace before we
            // begin reading a line
            else if (builder.Length == 0 && Char.IsWhiteSpace(c))
            {
                continue;
            }
            // concatenate the current character to our line
            else
            {
                builder.Append(c);
            }
        }
        // if there's a final row, add it to dane
        if (builder.Length > 0)
        {
            dane.Add(builder.ToString());
        }
    }

    // dane now contains each line's contents.
//构建最终结果列表
List dane=新列表();
//使用StreamReader读取文件
使用(StreamReader sr=新StreamReader(ms))
{
//创建一个字符串生成器,我们可以使用它来存储每个字符串
//行的内容,直到它准备好添加到dane
StringBuilder=新的StringBuilder();
//缓冲字符
字符c;
//逐字读取流
而(!sr.EndOfStream)
{
c=(Char)sr.Read();
//如果它是`;`它是一行的结尾,那么将它添加到
//dane并重置行的内容
如果(c==';')
{
Add(builder.ToString());
builder.Clear();
}
//在阅读之前,避免使用多余的空格
//开始读一行
else if(builder.Length==0&&Char.IsWhiteSpace(c))
{
继续;
}
//将当前字符连接到我们的行
其他的
{
附加(c);
}
}
//如果有最后一行,将其添加到dane
如果(builder.Length>0)
{
Add(builder.ToString());
}
}
//dane现在包含每行的内容。

您可能会对此进行优化,一次读取1024个字符,然后搜索
在中,但这只是一个简单的示例,向您展示了如何开始。

我建议您只使用一些现有的代码/库,而不是将自己挤在一起

那里只有两个人

我还建议使用ServiceStack.Text nuget
使用Nuget现有的CSV解析器。 Nuget()上的“CSVTools”处理这个问题,速度非常快,它支持绑定到强.NET类型以便于解析

用法如下:

var dt = DataAccess.DataTable.New.Read(@"c:\temp\test.csv"); 
foreach (Row row in dt.Rows())  { } 

你试过沃尔格林而不是沃尔格林吗?那是什么?你能提供一个内容的例子吗?此外,如果有新行,您可能不想
读取行
,而是要一直读到下一次出现
或文件结尾(以先到者为准)。我想在你的标题中,你的意思是CSV就是一切。您可以发布一个示例csv吗?我如何使用\r和\n读取csv的内容?