输入文本文件,向每行添加文本,写入新文件C#

时间:2013-04-19 07:02:37

标签: c# list io

对于家庭作业,我必须为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.
            }

        }

这确实正确映射到我的字典,所以不要担心那部分。

3 个答案:

答案 0 :(得分:0)

var inputLines = File.ReadAllLines(inputFilePath);
for (int i=0; i<inputLines.Length; i++)
    inputLines[i] = "Some Text" + inputLines[i];

答案 1 :(得分:0)

假设您的前缀在另一个列表中

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]);}
}

答案 2 :(得分:0)

您可以使用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())