我一直在四处寻找,但还没有找到我现在正在努力的好榜样。
我有一个带有几列的.txt文件,如下所示:
/Library/Java/JavaVirtualMachines/jdk1.8.0_77.jdk/Contents/Home/bin/java...
Testing started at 2:50 PM ...
in beforeAll
test 1
in afterAll
in beforeAll
test2
in afterAll
Process finished with exit code 0
我正在从文件中读取这些字符串[]数组。 我想将它们分成一个列表 例如
列出结果,[0]索引将是列的第一个索引
# ID,YYYYMMDD, COLD,WATER, OD, OP,
52,20120406, 112, 91, 20, 130,
53,20130601, 332, 11, 33, 120,
等。
现在我一直在环顾四周,想出了results[0].ID
results[0].COLD
分裂
但是我不确定如何处理它,因为每个条目都在另一个条目下。
"\\\s+"
非常感谢任何帮助!
亲切的问候,有毒。
答案 0 :(得分:1)
我建议使用 Linq ,如下所示:
List<Bus> results = File
.ReadLines(@"C:\MyFile.txt") // we have no need to read All lines in one go
.Skip(1) // skip file's title
.Select(line => line.Split(','))
.Select(items => new Bus( //TODO: check constructor's syntax
int.Parse(items[1]),
int.Parse(items[3]),
DateTime.ParseExact(items[2], "yyyyMMdd", CultureInfo.InvariantCulture)))
.ToList();
答案 1 :(得分:0)
我愿意
public class Foo
{
public int Id {get; set;}
public string Date {get; set;}
public double Cold {get; set;}
//...more
}
然后阅读文件
var l = new List<Foo>();
foreach (line in lines)
{
var sp = line.Split(',');
var foo = new Foo
{
Id = int.Parse(sp[0].Trim()),
Date = sp[1].Trim(),//or pharse the date to a date time struct
Cold = double.Parse(sp[2].Trim())
}
l.Add(foo);
}
//now l contains a list filled with Foo objects
答案 2 :(得分:0)
我可能会保留一个属性列表并使用反射来填充对象,如下所示:
var columnMap = new[]{"ID","YYYYMMDD","COLD","WATER","OD","OP"};
var properties = columnMap.Select(typeof(Bus).GetProperty).ToList();
var resultList = new List<Bus>();
foreach(var line in lines)
{
var val = line.Split(',');
var adding = new Bus();
for(int i=0;i<val.Length;i++)
{
properties.ForEach(p=>p.SetValue(adding,val[i]));
}
resultList.Add(adding);
}
这假设您的所有属性都是字符串
答案 3 :(得分:0)
这样的事可能......
results.Add(new Bus
{
ID = val[0],
YYYYMMDD = val[1],
COLD = val[2],
WATER = val[3],
OD = val[4],
OP = val[5]
});
请记住,此时val数组中的所有值仍然是字符串。如果键入了Bus的属性,则需要将它们解析为正确的类型,例如假设ID被输入为int ...
ID = string.IsNullOrEmpty(val[0]) ? default(int) : int.Parse(val[0]),
此外,如果列标题实际存在于第一行的文件中,则您需要跳过/忽略该行并处理其余行。
答案 4 :(得分:0)
鉴于我们的Bus
类包含文本文件中的所有变量:
class Bus
{
public int id;
public DateTime date;
public int cold;
public int water;
public int od;
public int op;
public Bus(int _id, DateTime _date, int _cold, int _water, int _od, int _op)
{
id = _id;
date = _date;
cold = _cold;
water = _water;
od = _od;
op = _op;
}
}
然后我们可以在结果列表中列出所有这些:
List<Bus> results = new List<Bus>();
foreach (string line in File.ReadAllLines(path))
{
if (line.StartsWith("#"))
continue;
string[] parts = line.Replace(" ", "").Split(','); // Remove all spaces and split at commas
results.Add(new Bus(
int.Parse(parts[0]),
DateTime.ParseExact(parts[1], "yyyyMMdd", CultureInfo.InvariantCulture),
int.Parse(parts[2]),
int.Parse(parts[3]),
int.Parse(parts[4]),
int.Parse(parts[5])
));
}
并根据需要访问值:
results[0].id;
results[0].cold;
//etc.
我希望这会有所帮助。