文件流读取数组到行 C#
filestream read array to lines C#
我对此很陌生。
我应该写一个带有数组的文件(知道了)并读取 7 行的内容,每行 11 个字节(不知道如何)。
如果你会说德语,那就是我的任务:
控制台输出应该是 7 行,每行 11 行
字符是结构化的——这也对应于上面数组元素的排列。
但是请注意,数组中的一行由 33 个字符组成 - 您的控制台输出应该
由十一个字符组成!
这是我目前的情况:
using System;
using System.IO;
namespace ESA_2
{
class Program
{
public void ESA2In(string Path)
{
byte[] array = {32, 32, 67, 67, 32, 32, 32, 35, 32, 35, 32,
32, 67, 32, 32, 67, 32, 32, 35, 32, 35, 32,
67, 32, 32, 32, 32, 32, 35, 35, 35, 35, 35,
67, 32, 32, 32, 32, 32, 32, 35, 32, 35, 32,
67, 32, 32, 32, 32, 32, 35, 35, 35, 35, 35,
32, 67, 32, 32, 67, 32, 32, 35, 32, 35, 32,
32, 32, 67, 67, 32, 32, 32, 35, 32, 35, 32 };
FileStream stream = File.Open(@"C:\users\...test.txt", FileMode.Create);
stream.Write(array, 0, array.Length);
stream.Close();
}
public void ESA2Out(string Path)
{
StreamReader reader = new StreamReader(File.Open(@"C:\users\...test.txt", FileMode.Open));
string line;
while ((line = reader.ReadLine()) != null)
{
Console.WriteLine(line);
}
Console.WriteLine();
reader.Close();
}
static void Main(string[] args)
{
string Path = @"C:\users\...\test.txt";
Program test = new Program();
test.ESA2In(Path);
test.ESA2Out(Path);
}
}
}
您可以使用 Read()
方法将符号作为字符串读回。
例如,
public void ESA2Out(string Path)
{
using (var reader = new StreamReader(File.Open(@"C:\users\...test.txt", FileMode.Open)))
{
for (var lineNumber = 0; lineNumber < 7; lineNumber++)
{
string line = "";
for (var charNumber = 0; charNumber < 11; charNumber++)
line = line + (char)reader.Read();
Console.WriteLine(line);
}
Console.WriteLine();
reader.Close();
}
}
顺便说一句,它应该打印大 'C#',其中 'C' 由 'C'-字母和 '#' 的 '#' 组成。
Quercus 解决方案涵盖了您的问题。我只是想为您提供与实际任务相对应的更简单的解决方案。您的任务是将二进制输出转换为字符字母,并在每 11 个字符后添加一个换行符。你的作业没有要求写作和阅读。
byte[] array = {32, 32, 67, 67, 32, 32, 32, 35, 32, 35, 32,
32, 67, 32, 32, 67, 32, 32, 35, 32, 35, 32,
67, 32, 32, 32, 32, 32, 35, 35, 35, 35, 35,
67, 32, 32, 32, 32, 32, 32, 35, 32, 35, 32,
67, 32, 32, 32, 32, 32, 35, 35, 35, 35, 35,
32, 67, 32, 32, 67, 32, 32, 35, 32, 35, 32,
32, 32, 67, 67, 32, 32, 32, 35, 32, 35, 32 };
string output = string.Empty;
for(int i = 0; i<array.Length; i++)
{
if (i % 11 == 0) output += Environment.NewLine;
output += (char)array[i];
}
Console.WriteLine(output);
Console.ReadLine();
更短的代码
public void ESA2Out()
{
ReadOnlySpan<char> chars = File.ReadAllBytes("test.txt")
.Select(b => (char)b).ToArray();
for (int i = 0; i < chars.Length; i += 11)
{
Console.WriteLine(new string(chars.Slice(i, 11)));
}
}
我对此很陌生。 我应该写一个带有数组的文件(知道了)并读取 7 行的内容,每行 11 个字节(不知道如何)。
如果你会说德语,那就是我的任务: 控制台输出应该是 7 行,每行 11 行 字符是结构化的——这也对应于上面数组元素的排列。 但是请注意,数组中的一行由 33 个字符组成 - 您的控制台输出应该 由十一个字符组成!
这是我目前的情况:
using System;
using System.IO;
namespace ESA_2
{
class Program
{
public void ESA2In(string Path)
{
byte[] array = {32, 32, 67, 67, 32, 32, 32, 35, 32, 35, 32,
32, 67, 32, 32, 67, 32, 32, 35, 32, 35, 32,
67, 32, 32, 32, 32, 32, 35, 35, 35, 35, 35,
67, 32, 32, 32, 32, 32, 32, 35, 32, 35, 32,
67, 32, 32, 32, 32, 32, 35, 35, 35, 35, 35,
32, 67, 32, 32, 67, 32, 32, 35, 32, 35, 32,
32, 32, 67, 67, 32, 32, 32, 35, 32, 35, 32 };
FileStream stream = File.Open(@"C:\users\...test.txt", FileMode.Create);
stream.Write(array, 0, array.Length);
stream.Close();
}
public void ESA2Out(string Path)
{
StreamReader reader = new StreamReader(File.Open(@"C:\users\...test.txt", FileMode.Open));
string line;
while ((line = reader.ReadLine()) != null)
{
Console.WriteLine(line);
}
Console.WriteLine();
reader.Close();
}
static void Main(string[] args)
{
string Path = @"C:\users\...\test.txt";
Program test = new Program();
test.ESA2In(Path);
test.ESA2Out(Path);
}
}
}
您可以使用 Read()
方法将符号作为字符串读回。
例如,
public void ESA2Out(string Path)
{
using (var reader = new StreamReader(File.Open(@"C:\users\...test.txt", FileMode.Open)))
{
for (var lineNumber = 0; lineNumber < 7; lineNumber++)
{
string line = "";
for (var charNumber = 0; charNumber < 11; charNumber++)
line = line + (char)reader.Read();
Console.WriteLine(line);
}
Console.WriteLine();
reader.Close();
}
}
顺便说一句,它应该打印大 'C#',其中 'C' 由 'C'-字母和 '#' 的 '#' 组成。
Quercus 解决方案涵盖了您的问题。我只是想为您提供与实际任务相对应的更简单的解决方案。您的任务是将二进制输出转换为字符字母,并在每 11 个字符后添加一个换行符。你的作业没有要求写作和阅读。
byte[] array = {32, 32, 67, 67, 32, 32, 32, 35, 32, 35, 32,
32, 67, 32, 32, 67, 32, 32, 35, 32, 35, 32,
67, 32, 32, 32, 32, 32, 35, 35, 35, 35, 35,
67, 32, 32, 32, 32, 32, 32, 35, 32, 35, 32,
67, 32, 32, 32, 32, 32, 35, 35, 35, 35, 35,
32, 67, 32, 32, 67, 32, 32, 35, 32, 35, 32,
32, 32, 67, 67, 32, 32, 32, 35, 32, 35, 32 };
string output = string.Empty;
for(int i = 0; i<array.Length; i++)
{
if (i % 11 == 0) output += Environment.NewLine;
output += (char)array[i];
}
Console.WriteLine(output);
Console.ReadLine();
更短的代码
public void ESA2Out()
{
ReadOnlySpan<char> chars = File.ReadAllBytes("test.txt")
.Select(b => (char)b).ToArray();
for (int i = 0; i < chars.Length; i += 11)
{
Console.WriteLine(new string(chars.Slice(i, 11)));
}
}