我正在尝试用C#读取文本文件并在行中添加行号。
这是我的输入文件:
This is line one
this is line two
this is line three
这应该是输出:
1 This is line one
2 this is line two
3 this is line three
到目前为止,这是我的代码:
class Program
{
public static void Main()
{
string path = Directory.GetCurrentDirectory() + @"\MyText.txt";
StreamReader sr1 = File.OpenText(path);
string s = "";
while ((s = sr1.ReadLine()) != null)
{
for (int i = 1; i < 4; i++)
Console.WriteLine(i + " " + s);
}
sr1.Close();
Console.WriteLine();
StreamWriter sw1 = File.AppendText(path);
for (int i = 1; i < 4; i++)
{
sw1.WriteLine(s);
}
sw1.Close();
}
}
我90%确定我需要使用循环来获取行号,但到目前为止,使用此代码我在控制台中获得此输出:
1 This is line one
2 This is line one
3 This is line one
1 this is line two
2 this is line two
3 this is line two
1 this is line three
2 this is line three
3 this is line three
这是在输出文件中:
This is line number one.
This is line number two.
This is line number three.1
2
3
我不确定为什么在写入文件时不使用字符串变量s,即使它是先前定义的(另一个块,另一个规则可能?)。
答案 0 :(得分:2)
IEnumerable<string> lines = File.ReadLines(file)
.Select((line,i)=>i + " " + line)
.ToList();
File.WriteAllLines(file, lines);
答案 1 :(得分:2)
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
namespace AppendText
{
class Program
{
public static void Main()
{
string path = Directory.GetCurrentDirectory() + @"\MyText.txt";
StreamReader sr1 = File.OpenText(path);
string s = "";
int counter = 1;
StringBuilder sb = new StringBuilder();
while ((s = sr1.ReadLine()) != null)
{
var lineOutput = counter++ + " " + s;
Console.WriteLine(lineOutput);
sb.Append(lineOutput);
}
sr1.Close();
Console.WriteLine();
StreamWriter sw1 = File.AppendText(path);
sw1.Write(sb);
sw1.Close();
}
}
}
答案 2 :(得分:1)
OPEN STREAM
读取整行并将其存储在临时变量中。 使用计数器跟踪您已阅读的行。 将计数器与temp变量连接起来。 将其保存到文件中。 将你的线指针移动到下一行和 重复。
然后关闭你的流
答案 3 :(得分:1)
我可以为您提供正确的代码,但由于这是家庭作业,我只会问您应该引导您找到正确答案的问题:
答案 4 :(得分:0)
您需要在每个行字符串前面添加行号。查看String.Format
。另外,尝试一个位于while循环之外的计数器变量来保持行数。
希望这足以让你走上正确的道路,而不会给你准确的答案。
答案 5 :(得分:0)
您确定要在循环while
内关闭流吗?
答案 6 :(得分:0)
注意FOR循环,你把它们放在While中,所以基本上你说的是:
while ((s = sr1.ReadLine()) != null)
读取每一行
for (int i = 1; i < 4; i++)
写一次重复3次。
此外,您正在关闭while内部的流,因此在读取第一行之后。
答案 7 :(得分:0)
以下是您的一个主要问题:
for (int i = 1; i < 4; i++)
Console.WriteLine(i + " " + s);
}
您正在使用花括号关闭for循环但不使用花括号来打开它。这意味着上面引用的大括号实际上正在关闭while循环,所以你循环完成所有的console.writeline,然后当你来写文件时,你实际上根本没有从文件中读取 - s是“”到期范围界定。