在ReadAllLines方法中如何区分换行和回车?
我写的是重写CSV文件到Excel电子表格的程序。 我需要二维数组来写入文本到Excel中,所以我使用File.ReadAllLines和在foreach line.Split方法为它,它的工作完美。 问题是,当我们想要在Excel单元格内进行换行时 – ReadAllLines被换行和回车的方式相同,所以我们在Excel中也会有不同的单元格。
问题是,有什么办法可以重写这个方法,我们可以把LF和CR区分开来? 例如,什么时候LF不创build新行,所以列表中的新元素,只要将它附加到以前的string与某种types的标识为Excel。
这是我如何阅读文件:
public virtual List<List<string>> Read(string inFile) { var sheetData = new List<List<string>>(); if (!File.Exists(inFile)) { FileDoesNotExist(inFile); return sheetData; } var lines = File.ReadAllLines(inFile); foreach (var line in lines) { var cells = line.Split(_delimiter).ToList(); sheetData.Add(cells); } return sheetData; }
不,你不能覆盖这个行为。
File.ReadAllLines(...)
的文档指出:
一行被定义为一个字符序列,后跟一个回车符('\ r'),一个换行符('\ n'),或者一个回车符后跟一个换行符
File.ReadAllLines
使用StreamReader
进行实现, StreamReader.ReadLine(...)
被硬编码为\r
, \n
或\r\n
。
然而,你可以使用File.ReadAllText(...)
,然后分割\r
,例如:
string[] lines = File.ReadAllText(inFile).Split('\r');
但是请记住,除非您的数据是非常严格创build的,否则这实际上不是处理CSV数据的好方法。 诸如Lumenworks CSV Reader或TextFieldParser之类的库更适合“现实世界”数据,因为它正确处理分隔符和文本环绕。 不过,我不知道任何允许你改变行分隔符。