输入文本文件,每行添加文本,写入新文件c#
本文关键字:文件 文本 新文件 添加 输入 | 更新日期: 2023-09-27 18:10:09
对于家庭作业,我必须为MIPS代码创建一个非常简化的汇编程序。因此,我们接收MIPS指令的输入文件,然后输出一个带有输入代码的相关二进制文件。每一行代码都必须映射到一个"内存"位置,它只是行前面的一个十六进制值,但是我们添加/分配这个"内存"。
因此,我想做的是从文本文件中读取每一行,并在前面附加一个值(十六进制的起始内存地址+(行号* 4))。那我想再读一遍文件。如果我需要读取整个文件,用分配的内存创建一个新文件,然后读取该文件,这很好,但我想可能没有必要。
我们的教授建议了一个清单,所以这是我到目前为止的清单:
Console.WriteLine("Please enter the path to the input file:");
string inp = Console.ReadLine();
Console.WriteLine("Please enter the name of the new file:");
string otp = Console.ReadLine();
StreamReader inputFile = new StreamReader(inp);
StreamWriter outputFile = new StreamWriter(otp);
List<string> fileContents = new List<string>();
while ((inp = inputFile.ReadLine()) != null)
fileContents.Add(inp);
所以我的问题是:我如何将字符串添加到该列表(fileContents)中的每个项目的开头?
编辑: 跟进:到目前为止,我已经设法做到了所有这些,我已经把我的整个文档,映射内存位置到每行等。但是,我需要进一步编辑列表"inputLines"中的一些行,删除其中的一些信息。
格式将始终是[0]内存地址[1]标签,或者,如果这一行没有标签,则寄存器,操作等[2]-[?]寄存器、操作等。一旦我将内存映射到每一行,任何有标签的行,我都想把索引作为标签,内存地址作为包含的值放入字典中,然后去掉标签。那么,我如何从任何包含它的行中删除这个信息呢?
//go through each line, if any line's first "token" is a label,
//put it in the dictionary as the index with the memory address as the value
//delete the label from the line
for (int i = 0; i < inputLines.Length; i++)
{
string[] token = inputLines[i].Split(new char[] { ' ', ',', '(', ')', ':' }, StringSplitOptions.RemoveEmptyEntries);
string possibleLabel = token[1];
if (opcodes.ContainsKey(possibleLabel) == false)
{
labeltable.Add(possibleLabel, token[0]);
//at this point I want to delete the possibleLabel from the inputLines[i] and not deal with it anymore.
}
}
它正确地映射到我的字典,所以不用担心那部分
您可以使用StringBuilder作为Faisal代码的优化,否则它将完美地满足您的需求
Console.WriteLine("Please enter the path to the input file:");
string inp = Console.ReadLine();
Console.WriteLine("Please enter the name of the new file:");
string otp = Console.ReadLine();
System.Text.StringBuilder sb = new System.Text.StringBuilder();
string inputLines = System.IO.File.ReadAllLines(inp);
for (int i = 0; i < inputLines.Length; i++)
sb.Append("Some Text" + inputLines[i] + Environment.NewLine);
File.WriteAllText(otp, sb.ToString())
var inputLines = File.ReadAllLines(inputFilePath);
for (int i=0; i<inputLines.Length; i++)
inputLines[i] = "Some Text" + inputLines[i];
假设您的前缀在另一个列表
var prefixes = new List<string>(/* som values */);
var ix = 0;
var result = fileContents.Select(x => string.Join(" ", prefixes[ix++], x)).ToArray();
如果你需要连接行号(从字典)
var prefixes = new Dictionary<int, string>(); // Needs values
var result = new List<string>();
for (var i = 0; i < fileContents.Count; i++){
string prefix;
if (prefixes.TryGetValue(i, out prefix){ result.Add(string.Join(" ", prefix, fileContent[i])) }
else { result.Add(fileContent[i]);}
}