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