gpt4 book ai didi

C# File.ReadAllLines 和 StreamReader.ReadLine 分割一些行

转载 作者:行者123 更新时间:2023-12-01 23:54:29 26 4
gpt4 key购买 nike

我正在开发一个项目,用于根据一组任意规则读取和转换 CSV 文件,选择一个文件告诉程序如何根据输入输出数据并解析文件。

我遇到的问题是,当我从输入文件中读取行时,它有时会读取额外的行或将行中途分割成两行,我最初使用 ReadAllLines 然后使用以下代码进行测试:

int testCount = 0;
StreamReader sr = File.OpenText(_FilePath.Text);
while(!sr.EndOfStream)
{
sr.ReadLine();
testCount++;
}
sr.Close();
sr.Dispose();

Console.WriteLine("Lines in For: " + testCount);

发现一个有 627 行的文件被读取为有 681 行(使用 ReadAllLines 并计算上述代码中的行数。

我尝试寻找具有相同问题的人,并尝试查看这些方法中是否存在“行”的最大长度,谷歌上没有出现任何内容,文件中出现的第一行是这样的一(为了保护隐私而更改了该行的信息,所有特殊字符都存在)

CODE, A/B Company Name, CONTACT NAME, ATTN  NAME A/B, 1234 CORPORATE CORP ST, Smithington, SM, 1234, , 123-456-7890, 123-456-7890, 12345 Plum ROAD, , Nowhere, NW, 12345, A/B Company Name2, Courier, , "Some A Info B For.Shipping Accnt. # 123456789 calendar days early^ 3 days late.", , 

文件本身从 Excel 电子表格导出为 CSV,原始文件中的所有逗号均替换为 ^(以防止出现问题),稍后将重新转换为逗号。

那么,有人知道 ReadAllLines 中行的长度有限制吗?或者幕后是否还有其他事情发生?因为这是从 Excel 导出的(最初是 DBF 文件),所以我不“认为”这是该文件的问题,但我可能是错的,我能做些什么来找出答案吗?

最佳答案

我保证 File.ReadAllLines()StreamReader.ReadLine() 的行为都与文档完全一致,没有隐藏的陷阱让您陷入。

请注意,两者都不区分不同的换行模式。在单个文件中,他们会很乐意在 \r\n\r\n 上换行。请注意,这意味着名义上使用 Windows 标准 \r\n 的文件,但具有额外的 \r 和/或 \n其中的字符将被解释为有额外的换行符。另请注意,\r\n 被视为单个换行符,而 \n\r 则被视为两个换行符。

准确诊断正在发生的情况的方法是将文件视为二进制文件。首先,检查你的输出,看看它在哪里断行,特别是你发现它在你认为不应该断行的第一个地方。

然后,在 Visual Studio 中打开该文件,但不是仅仅打开它,而是选择“打开方式...”选项(单击“打开”按钮上的黑色三角形),然后选择“二进制编辑器”。查看文件以查找出现第一个不需要的换行符的文本,并检查文件中该位置的十六进制值。您会发现 \r\n\r\n 的某种组合(\r 是十六进制值 0D\n0A)。

关于C# File.ReadAllLines 和 StreamReader.ReadLine 分割一些行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27074206/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com