Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.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# 从文本文件读取字母数字数据_C# - Fatal编程技术网

C# 从文本文件读取字母数字数据

C# 从文本文件读取字母数字数据,c#,C#,我使用下面的代码从文本文件中读取二进制数据并将其分成小块。我想对一个包含字母数字数据的文本文件做同样的处理,这显然不适用于二进制读取器。哪个读取器最适合实现该流、字符串或文本,以及如何在下面的代码中实现它 public static IEnumerable<IEnumerable<byte>> ReadByChunk(int chunkSize) { IEnumerable<byte> result;

我使用下面的代码从文本文件中读取二进制数据并将其分成小块。我想对一个包含字母数字数据的文本文件做同样的处理,这显然不适用于二进制读取器。哪个读取器最适合实现该流、字符串或文本,以及如何在下面的代码中实现它

public static IEnumerable<IEnumerable<byte>> ReadByChunk(int chunkSize)
            {
                IEnumerable<byte> result;
                int startingByte = 0;
                do
                {
                    result = ReadBytes(startingByte, chunkSize);
                    startingByte += chunkSize;
                    yield return result;
                } while (result.Any());
            }

            public static IEnumerable<byte> ReadBytes(int startingByte, int byteToRead)
            {
                byte[] result;
                using (FileStream stream = File.Open(@"C:\Users\file.txt", FileMode.Open, FileAccess.Read, FileShare.Read))

                using (BinaryReader reader = new BinaryReader(stream))
                {
                    int bytesToRead = Math.Max(Math.Min(byteToRead, (int)reader.BaseStream.Length - startingByte), 0);
                    reader.BaseStream.Seek(startingByte, SeekOrigin.Begin);
                    result = reader.ReadBytes(bytesToRead);
                }
                return result;
            }
公共静态IEnumerable ReadByChunk(int-chunkSize)
{
可数结果;
int startingByte=0;
做
{
结果=读取字节(起始字节、块大小);
startingByte+=块大小;
收益结果;
}while(result.Any());
}
公共静态IEnumerable ReadBytes(int startingByte,int byteToRead)
{
字节[]结果;
使用(FileStream stream=File.Open(@“C:\Users\File.txt”、FileMode.Open、FileAccess.Read、FileShare.Read))
使用(BinaryReader=新的BinaryReader(流))
{
int-bytesToRead=Math.Max(Math.Min(byteToRead,(int)reader.BaseStream.Length-startingByte),0);
reader.BaseStream.Seek(startingByte,SeekOrigin.Begin);
结果=reader.ReadBytes(bytesToRead);
}
返回结果;
}

我只能帮助您了解一般流程:

字符串/文本是读取、写入或处理的第二差数据格式。应专门为用户的输出和输入保留。它有一些严重的问题,如存储和检索格式

如果必须以文本形式传输、存储或检索某些内容,请确保在所有端点使用固定的区域性格式(通常不变)。你不想与这两个人发生冲突

来自AT的最差数据是原始二进制数据。但对于原始二进制文件,有一个特殊的第0位,您必须将其解释为文本,然后进行进一步处理。引用我在编码上链接的最重要部分:

在不知道使用什么编码的情况下使用字符串是没有意义的。[...] 如果内存、文件或电子邮件中有字符串,则必须知道其编码方式,否则无法正确解释或显示给用户

几乎每一个愚蠢的“我的网站看起来像胡言乱语”或“当我使用口音时她看不懂我的电子邮件”问题都归结为一个天真的程序员,他不明白一个简单的事实,即如果你不告诉我某个字符串是用UTF-8还是ASCII或ISO 8859-1(拉丁语1)还是Windows 1252(西欧)编码的,您根本无法正确显示它,甚至无法确定它的终点。有超过100种编码,超过代码点127,所有赌注都被取消


我只能帮你弄清楚一般流程:

字符串/文本是读取、写入或处理的第二差数据格式。应专门为用户的输出和输入保留。它有一些严重的问题,如存储和检索格式

如果必须以文本形式传输、存储或检索某些内容,请确保在所有端点使用固定的区域性格式(通常不变)。你不想与这两个人发生冲突

来自AT的最差数据是原始二进制数据。但对于原始二进制文件,有一个特殊的第0位,您必须将其解释为文本,然后进行进一步处理。引用我在编码上链接的最重要部分:

在不知道使用什么编码的情况下使用字符串是没有意义的。[...] 如果内存、文件或电子邮件中有字符串,则必须知道其编码方式,否则无法正确解释或显示给用户

几乎每一个愚蠢的“我的网站看起来像胡言乱语”或“当我使用口音时她看不懂我的电子邮件”问题都归结为一个天真的程序员,他不明白一个简单的事实,即如果你不告诉我某个字符串是用UTF-8还是ASCII或ISO 8859-1(拉丁语1)还是Windows 1252(西欧)编码的,您根本无法正确显示它,甚至无法确定它的终点。有超过100种编码,超过代码点127,所有赌注都被取消


您需要读取的文件是否已修复,或者您是否可以将写入内容更改为类似“带Base64编码二进制文件的CSV文件”或“XML文件”?@Christopher-它已修复…无法更改您的代码没有多大意义。如果你读100个字节,然后你的区块大小是40个字节,那么剩下的60个字节你会怎么处理?@jdweng-我是在区块中读取它…继续你的例子…首先读取40个字节,然后是接下来的40个字节,然后是接下来的20个字节“区块”文本文件最简单的方法是逐行读取它,并拥有你的(非相等大小)与您的行匹配的错误是您要读取的文件已修复,或者您是否可以将写入内容更改为类似“带Base64编码二进制文件的CSV文件”或“XML文件”?@Christopher-它已修复…无法更改您的代码没有多大意义。如果你读100个字节,然后你的区块大小是40个字节,那么剩下的60个字节你会怎么处理?@jdweng-我是在区块中读取它…继续你的例子…首先读取40个字节,然后是接下来的40个字节,然后是接下来的20个字节“区块”文本文件最简单的方法是逐行读取它,并拥有你的(非相等大小)裂缝与你的线条相匹配谢谢你的回答。然而,这对我来说太复杂了,无法理解,因为我对C#的世界相当陌生。你能修改代码来做你所说的吗?@dude我不能修改代码来工作,因为我不知道字符串的编码方式。如果不知道字符串的编码,则无法处理它。理想情况下,我需要样本输入,但二进制必须解码成字符串,这几乎是不可能的。谢谢你的支持