为了账号安全,请及时绑定邮箱和手机立即绑定

C# 将文本附加到某一行

C# 将文本附加到某一行

C#
梦里花落0921 2022-06-12 16:41:40
我尝试在一个文本文件中构建一些表格,如下所示:Name           Grade--------------------John           100Mike           94......我有这一堆代码:List<string> NamesList = new List<string>();            List<int> Grades = new List<int>();            Grades.Add(98);            Grades.Add(100);            NamesList.Add("John");            NamesList.Add("Alon");            if (NamesList.Count() == Grades.Count())            {                var length = NamesList.Count();                var min = Grades.Min();                var max = Grades.Max();                using (System.IO.StreamWriter myF =                    new System.IO.StreamWriter(@"C:\Users\axcel\textfolder\myFile.txt", true))                {                    for (int i = 0; i < length; i++)                    {                        if (i == 0)                        {                            myF.WriteLine("Name           Age           Grade");                            myF.WriteLine("==================================");                        }                        myF.WriteLine(NamesList.ElementAt(i));                        myF.WriteLine("         ");                        myF.WriteLine(Grades.ElementAt(i));                    }                }            }但我的问题是,在它写在一个新行的名字之后写成绩。我想把它一起写成一个字符串并流式传输,但我想避免额外的计算......我该如何解决它?
查看完整描述

4 回答

?
jeck猫

TA贡献1909条经验 获得超7个赞

WriteLine()始终在文本后添加新行。所以在你的情况下应该是


 myF.Write(NamesList.ElementAt(i));

 myF.Write("         ");

 myF.WriteLine(Grades.ElementAt(i));


查看完整回答
反对 回复 2022-06-12
?
侃侃尔雅

TA贡献1801条经验 获得超16个赞

您始终可以使用字符串插值对齐来对齐文本。


为了遵循一些评论,我还敦促您建立一个持有这些价值观的类。


public class Student

{

    public string Name { get; set; }

    public int Age { get; set; }

    public int Grade { get; set; }

}

这是使用字符串插值对齐的代码


var students = new List<Student>

{

    new Student {Name = "John", Age = 10, Grade = 98},

    new Student {Name = "Alon", Age = 10, Grade = 100}

};


var minGrade = students.Min(s => s.Grade);

var maxGrade = students.Max(s => s.Grade);


using (var myF = new System.IO.StreamWriter(@"C:\Users\axcel\textfolder\myFile.txt", true))

{

    myF.WriteLine($"{"Name",-15}{"Age",-10}{"Grade",5}");

    myF.WriteLine("==============================");


    foreach (var student in students)

    {

        myF.WriteLine($"{student.Name,-15}{student.Age,-10}{student.Grade,5}");

    }

}

这将产生以下结果:


Name           Age       Grade

==============================

John           10           98

Alon           10          100

正数右对齐,负数左对齐


您可以在 Microsoft Docs的字符串插值页面上阅读有关它的更多信息


查看完整回答
反对 回复 2022-06-12
?
烙印99

TA贡献1829条经验 获得超13个赞

var students = new List<(string name, int age, int grade)>()

{

    ("John", 21, 98),

    ("Alon", 45, 100)

};


students.Add(("Alice", 35, 99));


using (var writer = new StreamWriter("myFile.txt"))

{

    writer.WriteLine(string.Join("\t", "Name", "Age", "Grade"));


    foreach(var student in students)

    {

        writer.WriteLine(string.Join("\t", student.name, student.age, student.grade));

    }

}

正如一些评论所建议的那样,您可以使用学生类来对姓名、年龄和年级进行分组。在这个例子中,我使用了一个值元组。


您可以看到它如何提高代码的可读性,并且您可以专注于您实际尝试解决的问题。您可以将写入操作简化为简单易读的表达式——这意味着您不太可能犯错误,例如混淆 Write 和 WriteLine。


查看完整回答
反对 回复 2022-06-12
?
HUX布斯

TA贡献1876条经验 获得超6个赞

要解决您遇到的问题,您可以使用: myF.WriteLine(NamesList.ElementAt(i) + "         " + Grades.ElementAt(i));

但是,您提供的代码将受益于注释中所述的修改(创建一个类,使用 FileHelpers 等)


查看完整回答
反对 回复 2022-06-12
  • 4 回答
  • 0 关注
  • 350 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号