从 position 插入多行到文件而不覆盖之前插入的行
Insert multiple lines into file from position without overwriting the previous inserted line
我想使用 foreach 循环(在列表上循环)将多个“项目”插入到列表中。现在我想将这些行作为 <td>
元素插入。但是通过在我想插入行的位置指定索引,前一个被覆盖。如何在 position 添加一行,然后在不覆盖之前添加的行的情况下添加其余行
private void Create_Driver_Report(string npcName)
{
var fileName = Get_Path("Driver_Reports.html");
var endTag = npcName;
var lineToAdd = "<!--New Line Here-->";
var htmlContent = File.ReadAllLines(fileName).ToList();
var index = htmlContent.FindIndex(x => x.Contains(lineToAdd));
htmlContent.Insert(index + 1, endTag);
File.WriteAllLines("drivers.html", htmlContent);
}
理论上我想怎么做
foreach (Drivers item in drivers)
{
Create_Driver_Report($"<td>{item.Driver_ID}</td>");
Create_Driver_Report($"<td>{item.Driver_Name}</td>");
Create_Driver_Report($"<td>{item.Vehicle_ID}</td>");
Create_Driver_Report($"<td>{item.Company_ID}</td>");
Create_Driver_Report($"<td>{item.Company_Name}</td>");
}
重写 ToString() 方法或创建一个新方法。
如果你总是想插入相同的属性,似乎没有必要一遍又一遍地调用 Create_Driver_Report
。
public override String ToString() {
return
$"<td>{this.Driver_ID}</td>\n" +
$"<td>{this.Driver_Name}</td>\n" +
$"<td>{this.Vehichle_ID}</td>\n" +
$"<td>{this.Company_ID}</td>\n" +
$"<td>{this.Company_Name}</td>";
}
您可以像这样调用它:
foreach (Drivers item in drivers) {
Create_Driver_Report(item.ToString());
}
编辑:
选项 1:
使用 LINQ Select() 和 List.InsertRange()
public String ToHtmlRow() {
return
$"<tr><td>{this.Driver_ID}</td><td>{this.Driver_Name}</td><td>{this.Vehichle_ID}</td><td>{this.Company_ID}</td><td>{this.Company_Name}</td></tr>";
}
{
IEnumerable<string> lines = drivers.Select(driver => driver.ToString())
Create_Driver_Report(lines);
}
static void Create_Driver_Report(IEnumerable<string> lines) {
var fileName = Get_Path("Driver_Reports.html");
var lineToAdd = "<!--New Line Here-->";
var htmlContent = File.ReadAllLines(fileName).ToList();
var index = htmlContent.FindIndex(x => x.Contains(lineToAdd));
htmlContent.InsertRange(index + 1, lines);
File.WriteAllLines("drivers.html", htmlContent);
}
选项 2:
您只需添加所需的所有行,然后只调用一次 Create_Driver_Report
。
List<String> toAdd = new List<String>();
foreach (Drivers item in drivers) {
toAdded.Add(item.ToHtmlRow());
}
Create_Driver_Report(String.Join("\n", toAdd));
我想使用 foreach 循环(在列表上循环)将多个“项目”插入到列表中。现在我想将这些行作为 <td>
元素插入。但是通过在我想插入行的位置指定索引,前一个被覆盖。如何在 position 添加一行,然后在不覆盖之前添加的行的情况下添加其余行
private void Create_Driver_Report(string npcName)
{
var fileName = Get_Path("Driver_Reports.html");
var endTag = npcName;
var lineToAdd = "<!--New Line Here-->";
var htmlContent = File.ReadAllLines(fileName).ToList();
var index = htmlContent.FindIndex(x => x.Contains(lineToAdd));
htmlContent.Insert(index + 1, endTag);
File.WriteAllLines("drivers.html", htmlContent);
}
理论上我想怎么做
foreach (Drivers item in drivers)
{
Create_Driver_Report($"<td>{item.Driver_ID}</td>");
Create_Driver_Report($"<td>{item.Driver_Name}</td>");
Create_Driver_Report($"<td>{item.Vehicle_ID}</td>");
Create_Driver_Report($"<td>{item.Company_ID}</td>");
Create_Driver_Report($"<td>{item.Company_Name}</td>");
}
重写 ToString() 方法或创建一个新方法。
如果你总是想插入相同的属性,似乎没有必要一遍又一遍地调用 Create_Driver_Report
。
public override String ToString() {
return
$"<td>{this.Driver_ID}</td>\n" +
$"<td>{this.Driver_Name}</td>\n" +
$"<td>{this.Vehichle_ID}</td>\n" +
$"<td>{this.Company_ID}</td>\n" +
$"<td>{this.Company_Name}</td>";
}
您可以像这样调用它:
foreach (Drivers item in drivers) {
Create_Driver_Report(item.ToString());
}
编辑:
选项 1:
使用 LINQ Select() 和 List.InsertRange()
public String ToHtmlRow() {
return
$"<tr><td>{this.Driver_ID}</td><td>{this.Driver_Name}</td><td>{this.Vehichle_ID}</td><td>{this.Company_ID}</td><td>{this.Company_Name}</td></tr>";
}
{
IEnumerable<string> lines = drivers.Select(driver => driver.ToString())
Create_Driver_Report(lines);
}
static void Create_Driver_Report(IEnumerable<string> lines) {
var fileName = Get_Path("Driver_Reports.html");
var lineToAdd = "<!--New Line Here-->";
var htmlContent = File.ReadAllLines(fileName).ToList();
var index = htmlContent.FindIndex(x => x.Contains(lineToAdd));
htmlContent.InsertRange(index + 1, lines);
File.WriteAllLines("drivers.html", htmlContent);
}
选项 2:
您只需添加所需的所有行,然后只调用一次 Create_Driver_Report
。
List<String> toAdd = new List<String>();
foreach (Drivers item in drivers) {
toAdded.Add(item.ToHtmlRow());
}
Create_Driver_Report(String.Join("\n", toAdd));