ASP.NET MVC:如何按固定宽度分割文本文件中的行并传递给模型



我正在尝试使用System.IO.File.ReadAllLines()读取一个文本文件,然后将数组的每一行输入到一个模型中,并将其传递给视图。

我可以成功读取文本文件,但我想将每一行拆分为列。文本文件有固定的宽度作为分隔符,这就是我失败的地方。

例如,我知道逗号是否是分隔符Project = row.Split(',')[0]是正确的,但我如何处理固定宽度?

我的行动如下。

我知道第一列从字符0开始,第二列在26,第三列在82,第四列在106

public ActionResult Index()
{
string[] texts = System.IO.File.ReadAllLines(Server.MapPath("~/App_Data/Test/test.txt"));
texts = texts.Skip(2).ToArray();
List<Alarm_DataModel> Alarm_Data = new List<Alarm_DataModel>();
foreach (string row in texts)
{
if (!string.IsNullOrEmpty(row))
{
Alarm_Data.Add(new Alarm_DataModel
{
Project = row.Split('0')[0],
Point = row.Split('26')[1],
TimeStamp = row.Split('82')[2],
DataValue = row.Split('106')[3],
});
}
}
ViewBag.Data = texts;
return View(Alarm_Data);
}

如果您使用的是C#8+:

foreach (string row in texts)
{
if (!string.IsNullOrEmpty(row))
{
Alarm_Data.Add(new Alarm_DataModel
{
Project = new string(row[0..25]),
Point = new string(row[26..85]),
TimeStamp = new string(row[86..105]),
DataValue = new string(row[106..^0]), //take the rest
});
}
}

否则:

foreach (string row in texts)
{
if (!string.IsNullOrEmpty(row))
{
Alarm_Data.Add(new Alarm_DataModel
{
Project = row.SubString(0,26),
Point = row.SubString(26, 60), //60 comes from 86 - 26
TimeStamp = row.SubString(86,30),  //30 comes from 106 - 86
DataValue = row.SubString(106), //take the rest
});
}
}

最新更新