从C#中的文本文件中读取多条记录
问题描述:
我需要一些逻辑/编程帮助,以便从文本文件中读取多条记录。我可以读取线条,但是我需要在记录完成后立即停止,将该对象推到列表中,然后继续记录新的记录,直到下一个记录出现,保存到列表中等等...从C#中的文本文件中读取多条记录
记录的标题总是以G开始,作为第一个字符。如果V(变量),d(坐标),M(插入点),等等
文件内容是这样的其余部分:(虚拟数据)
G FEATURE01 LEVEL01
M -10.5132 10.0000 697.5086
V \~\@ENTITY=LINE
V \~\@PENSTYLE=0
V \~\@PENTHICK=1
D -10.5089 12.0797 697.8155
D -10.4971 13.6198 698.0429
D -10.0399 17.3069 698.5913
D -10.7665 11.6108 699.2279
D -10.6769 15.9840 699.8735
D -10.8229 13.6024 710.4438
G FEATURE02 LEVEL02
M -10.2681 10.0000 700.4186
V \~\@ENTITY=LINE
V \~\@PENSTYLE=0
V \~\@PENTHICK=1
D -10.2269 10.6946 700.4941
D -10.2585 13.1788 700.7637
D -10.2937 15.9480 701.0642
D -10.9494 20.5230 709.1840
D -10.9277 21.4909 709.4517
D -10.8335 23.3862 709.9763
G FEATURE01 LEVEL02
M -15.4500 10.0000 700.4174
V \~\@ENTITY=LINE 0.00 0 0.00 A A
V \~\@PENSTYLE=0 0.00 0 0.00 A A
V \~\@PENTHICK=1 0.00 0 0.00 A A
D -15.5690 12.3042 700.6673
D -15.3502 14.3130 700.8863
D -15.1219 16.7179 701.1480
D -15.0628 17.3409 701.2427
D -15.5481 20.8968 709.2855
D -15.3132 22.9163 709.8470
D -15.1355 23.2957 709.9627
G FEATURE03 LEVEL03
P 0.0000 0.0000 0.0000 270.0000 90.0000
M -12.8612 14.2951 737.6336
V \~\@ENTITY=LINE
V \~\@PENSTYLE=1
V \~\@PENTHICK=1
V @0ver1ay=KOOS
D -13.2715 15.5321 736.5965
所以,从上面文本文件中有4条记录。 任何想法? 谢谢
答
这里是我试图放在一起的一段代码,为了清晰而不是鲁棒性等,它应该把你放在正确的轨道上。
1-我创建了一个简单的记录类,它将为每条记录(以'G'开始的行)创建,然后将所有后续行添加到此记录,直到文件中遇到新的记录开始。
class Record
{
public List<string> Lines { get; private set; }
public Record()
{
Lines = new List<string>();
}
}
2-然后,下面的代码将逐行处理文件,创建新记录,并将每条记录添加到Record集合中。
// Collection to be populated with the record data in the file
List<Record> records = new List<Record>();
using (FileStream fs = new FileStream("datafile.dat", FileMode.Open))
using (StreamReader rdr = new StreamReader(fs))
{
string line;
// Read first line
line = rdr.ReadLine();
while (line != null)
{
// Check if we have a new record
if (line.StartsWith("G"))
{
// We have a start of a record so create an instance of the Record class
Record record = new Record();
// Add the first line to the record
record.Lines.Add(line);
// Read the next line
line = rdr.ReadLine();
// While the line is not the start of a new record or end of the file,
// add the data to the current record instance
while (line != null && !line.StartsWith("G"))
{
record.Lines.Add(line);
line = rdr.ReadLine();
}
// Add the record instance to the record collection
records.Add(record);
}
else
{
// If we get here there was something unexpected
// So for now just move on and read the next line
line = rdr.ReadLine();
}
}
}
+0
辉煌的克里斯!你是男人。谢谢... – riaandelange 2010-07-10 12:34:58
请发布您迄今为止编写的代码。人们通常不喜欢只为你写代码。 – 2010-07-10 11:05:38
我的代码将占用6页...所以我宁愿让别人编写逻辑。谢谢克里斯! – riaandelange 2010-07-10 16:41:26