解析文本并保存在内存c#
本文关键字:存在 内存 保存 文本 | 更新日期: 2023-09-27 18:05:47
我有这样的文本
5 1 5 1 5 1 5 1
1
我必须得到
5 1 5 1 5 1 5 1
0 1 0 0 0 0 0 0
并将其保存在内存中。但是当我使用这样的结构时:
List<string> lines=File.ReadLines(fileName);
foreach (string line in lines)
{
var words = line.Split( new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
foreach(string w in words)
Console.Write("{0,6}", w);
// filling out
for (int i = words.Length; i < 8; i++)
Console.Write("{0,6}", "0.");
Console.WriteLine();
}
我只在显示中以所需格式打印文本。如何保存到List<string> newLines
如果我们假设数据是等间距的(如您当前的Write
等所建议的),那么我会将其处理为字符:
char[] chars = new char[49];
foreach(string line in File.ReadLines(path))
{
// copy in the data and pad with spaces
line.CopyTo(0, chars, 0, Math.Min(line.Length,chars.Length));
for (int i = line.Length; i < chars.Length; i++)
chars[i] = ' ';
// check every 6th character - if space replace with zero
for (int i = 1; i < chars.Length; i += 6) if (chars[i] == ' ')
chars[i] = '0';
Console.WriteLine(chars);
}
或者,如果您确实需要它作为行,使用(在每个循环迭代结束时):
list.Add(new string(chars));
我假设数字之间正好有5个空格。下面是代码:
List<string> lines = System.IO.File.ReadLines(fileName).ToList();
List<string> output = new List<string>();
foreach (string line in lines)
{
var words =
line.Split(new string[] { new string(' ', 5) },
StringSplitOptions.None).Select(input => input.Trim()).ToArray();
Array.Resize(ref words, 8);
words = words.Select(
input => string.IsNullOrEmpty(input) ? " " : input).ToArray();
output.Add(string.Join(new string(' ', 5), words));
}
//output:
// 5 1 5 1 5 1 5 1
// 0 1 0 0 0 0 0 0
您可以使用下面的代码来生成您想要的结果:
StreamReader sr = new StreamReader("test.txt");
string s;
string resultText = "";
while ((s = sr.ReadLine()) != null)
{
string text = s;
string[] splitedText = text.Split(''t');
for (int i = 0; i < splitedText.Length; i++)
{
if (splitedText[i] == "")
{
resultText += "0 't";
}
else
{
resultText += splitedText[i] + " 't";
}
}
resultText += "'n";
}
Console.WriteLine(resultText);
"test.txt"是包含文本的文本文件,"resultText"变量包含您想要的结果。