我尝试在文本文件中建立一些表格 看起来像这样:
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);
});
});
但是我的问题是,在换行的名字后面写分数。我曾想将其一起写入字符串并进行流传输,但我想避免额外的计算... 我该如何解决?
答案 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