我有一个文本文件,其中包含所有信息,我想将该信息读取到列表中。这是我的文本文件的设计。
------->26/05/2015 17:15:52<------------------
Index :0-0
Index :1-0
Index :2-20150527
Index :3-182431
------->27/05/2015 17:15:52<------------------
Index :0-0
Index :1-0
Index :2-20150527
Index :3-182431
------->28/05/2015 17:15:52<------------------
Index :0-0
Index :1-0
Index :2-20150527
Index :3-182431
我的问题是如何将这些信息读到我的列表中,我知道我可以逐行使用,但我怎么知道我正在阅读新项目?
答案 0 :(得分:2)
首先我们应该定义单词“new”,如果它意味着:
假设您的意思是文件中的新部分,那么您可以定义此类表示项目:
class Item
{
public List<string> Indexes;
public string Header;
public Item()
{
Indexes= new List<string>();
}
}
使用这样的简单循环解析文件:
List<Item> items = new List<Item>();
var lines = File.ReadAllLines("path-to-file");
Item currentItem = null;
foreach (var line in lines)
{
if (line.StartsWith("------->"))
{
if (currentItem != null)
{
items.Add(currentItem);
}
currentItem=new Item();
currentItem.Header = line;
}
else if (currentItem != null)
{
currentItem.Indexes.Add(line);
}
}
if (currentItem!=null)
items.Add(currentItem);
如果你的意思是新到目前为止没有阅读,那么你应该在“Item”类中存储输入日期,并将读取输入日期与已经存在于集合中的日期进行比较,并只读取新日期。
此外,你应该考虑文件是否被不时清除(旋转),然后你必须决定读取整个文件是否有意义,或者你应该只读取目前没有读取的行使用一些变量来存储数字在前一次迭代中读取的行数。还有其他这样的事情。
答案 1 :(得分:-1)
您需要使用这样的代码来解析文件。
//load the whole file in to memory
var lines = File.ReadAllLines("path-to-file"); //don't forget to add using System.IO;
//you will have to fill in your specific logic
MyCustomObject currentObject = null;
List<MyCustomObject> objects = new List<MyCustomObject>();
//loop over the lines in the file
foreach(var line in lines) {
if(line.StartsWith("------->")) {
//header line
//Again, fill in your logic here
currentObject = new MyCustomObject();
currentObject.SetHeader(line);
objects.Add(currentObject);
} else {
//body line
//double check that the file isn't malformed
if(currentObject == null) throw new Exception("Missing header record at beginning of file!");
//process the line
currentObject.AddLine(line);
}
}
//done!