如何解决ASP.NET MVC:如何按固定宽度拆分文本文件中的一行并传递给模型
我正在尝试使用 System.IO.File.ReadAllLines()
读取文本文件,然后将数组的每一行输入到我将传递给视图的模型中。
我可以成功读取文本文件,但我想将每一行分成几列。文本文件以固定宽度作为分隔符,这就是我失败的地方。
例如,我知道逗号是否是分隔符 Project = row.Split(',')[0]
是正确的,但我如何处理固定宽度?
我的操作如下。
我知道第一列从@字符 0 开始,第 2 个在 26,第 3 个在 82,第 4 个在 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
});
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。