C#将文本追加到特定行

时间:2018-12-14 11:16:54

标签: c# file

我尝试在文本文件中建立一些表格 看起来像这样:

Expression.MakeMemberAccess(null,typeof(TennantIdProvider).GetMember("CurrentId")[0]);

我有一堆代码:

const request = require('supertest')('https://my-app123.com');
const createJWT = require('../../lib/createApp/createJWT');
const app = require('./app');
let jwt;

describe('App creation', () => {
  it('should create new app', function(done) {
    jwt = createJWT();

    request
      .post('/v1/home')
      .set('Content-Type', 'application/json')
      .set('Authorization', `Bearer ${jwt}`)
      .send({
        name: 'Test',
        organisation: 'Test Inc.',
        objectionProcessingDefault: 'auto-uphold',
        users: [{
          email: 'me@example.co.uk',
          firstName: 'Dave',
          lastName: 'Smith',
          roles: ['ADMIN', 'STANDARD'],
        }, ],
      })
      .expect(200, done);
  });
});

但是我的问题是,在换行的名字后面写分数。我曾想将其一起写入字符串并进行流传输,但我想避免额外的计算... 我该如何解决?

5 个答案:

答案 0 :(得分:4)

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

 myF.Write(NamesList.ElementAt(i));
 myF.Write("         ");
 myF.WriteLine(Grades.ElementAt(i));

答案 1 :(得分:2)

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

正如一些评论所建议的那样,您可以使用“学生”课程对姓名,年龄和年级进行分组。在此示例中,我改用了Value Tuple

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

答案 2 :(得分:2)

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

要遵循一些评论,我也敦促您构建一个包含值的类。

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文档的string interpolation页上了解更多相关信息

答案 3 :(得分:1)

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

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

答案 4 :(得分:-1)

解决方案1: 为什么不尝试将两个字符串串联起来?

   string line = NamesList.ElementAt(i) + "         " + Grades.ElementAt(i);
   myF.WriteLine(line);

或 解决方案2: 您正在使用的是WriteLine(“ Text”)函数,该函数始终将文本写入下一行。相反,您可以使用Write(“ Text”)函数,该函数将在同一行上写入字符串。您可以尝试:

myF.Write(NamesList.ElementAt(i));
myF.Write("         ");
myF.Write(Grades.ElementAt(i));
myF.WriteLine(); // Here it will enter to new line