gpt4 book ai didi

C# 确定平面文件中的 EOL 字符

转载 作者:太空宇宙 更新时间:2023-11-03 21:27:56 26 4
gpt4 key购买 nike

我正在尝试从给定的 .txt 或 .csv 平面文件中识别 EOL 字符是什么。根据平面文件中第一行数据的 EOL 字符是什么,我想相应地处理该文件中的数据(我正在使用批量加载在 SQL Server 上创建表,需要将 EOL 传递给批量加载命令)。据我了解,Readline() 会自动处理 EOL,因此我无法解析 EOL 字符的 Readline() 字符串。下面的代码举例说明了我正在尝试做的事情:

int EOLChar_CRLF = 0;
int EOLChar_LF = 0;
int EOLChar_CR = 0;
int EOLChar_Hex = 0;

string eol_line = file2.ReadLine();
MessageBox.Show(eol_line);
EOLChar_CRLF = eol_line.IndexOf("\\r\\\n");
EOLChar_LF = eol_line.IndexOf("\\n");
EOLChar_CR = eol_line.IndexOf("\\r");
EOLChar_Hex = eol_line.IndexOf("\\0x0a");

MessageBox.Show("CRLF is line feed if " + EOLChar_CRLF.ToString() + " <> -1");
MessageBox.Show("LF is line feed if " + EOLChar_LF.ToString() + " <> -1");
MessageBox.Show("CR is line feed if " + EOLChar_CR.ToString() + " <> -1");
MessageBox.Show("0x0a is line feed if " + EOLChar_Hex.ToString() + " <> -1");

有人知道使用 StreamReader.ReadLine() 方法或任何其他方法来确定 EOL 的方法吗?我只想读取第一行数据并将其解析为 EOL,因为其中一些文件有 20+ 百万行。

最佳答案

确定文本文件的行尾约定的通常方法是从文件的开头插入一个足够大小的缓冲区并检查它。当然,缓冲区的大小在某种程度上取决于预期的行长度。您想吸收足够的数据以获得合理数量的行。

除了 Windows (CR+LF)、Unix/Linux/OS X (LF) 或老式 MacOS (CR) 之外,您不太可能遇到行尾约定。就速度而言,很难击败这样的东西。

public enum EndOfLineStyle
{
Unknown = 0 ,
CR = 1 ,
LF = 2 ,
CRLF = CR|LF ,
Unix = LF ,
MacOs = CR ,
Windows = CRLF ,
}

const int BUFFER_SIZE = 8192 ;
public EndOfLineStyle DetermineEndOfLineStyle( string pathToFile )
{
int bufl = 0 ;
char[] buf = new char[BUFFER_SIZE] ;

using ( StreamReader reader = File.OpenText( pathToFile ) )
{
bufl = reader.ReadBlock( buf , 0 , buf.Length ) ;
}

int crlfs = 0 ;
int crs = 0 ;
int lfs = 0 ;

for ( int i = 0 ; i < bufl ; )
{
if ( buf[i] == '\r' && i < bufl-1 && buf[i+1] == '\n' ) { ++crlfs ; i+=2 ; }
else if ( buf[i] == '\r' ) { ++crs ; i+=1 ; }
else if ( buf[i] == '\n' ) { ++lfs ; i+=1 ; }
}

EndOfLineStyle style ;
if ( crlfs > crs && crlfs > lfs ) style = EndOfLineStyle.Windows ;
else if ( lfs > crlfs && lfs > crs ) style = EndOfLineStyle.Unix ;
else if ( crs > crlfs && crs > lfs ) style = EndOfLineStyle.MacOs ;
else style = EndOfLineStyle.Unknown ;

return style ;
}

关于C# 确定平面文件中的 EOL 字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25853504/

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