【发布时间】:2018-08-24 05:01:20
【问题描述】:
我正在尝试使用 StreamReader 读取文件。该文件包含以下数据(还有 40,000 多行!):
Tyndall Centre grim file created on 22.01.2004 at 17:57 by Dr. Tim Mitchell
.pre = precipitation (mm)
CRU TS 2.1
[Long=-180.00, 180.00] [Lati= -90.00, 90.00] [Grid X,Y= 720, 360]
[Boxes= 67420] [Years=1991-2000] [Multi= 0.1000] [Missing=-999]
Grid-ref= 1, 148
3020 2820 3040 2880 1740 1360 980 990 1410 1770 2580 2630
3020 2820 3040 2880 1740 1360 980 990 1410 1770 2580 2630
3020 2820 3040 2880 1740 1360 980 990 1410 1770 2580 2630
3020 2820 3040 2880 1740 1360 980 990 1410 1770 2580 2630
3020 2820 3040 2880 1740 1360 980 990 1410 1770 2580 2630
3020 2820 3040 2880 1740 1360 980 990 1410 1770 2580 2630
3020 2820 3040 2880 1740 1360 980 990 1410 1770 2580 2630
3020 2820 3040 2880 1740 1360 980 990 1410 1770 2580 2630
3020 2820 3040 2880 1740 1360 980 990 1410 1770 2580 2630
3020 2820 3040 2880 1740 1360 980 990 1410 1770 2580 2630
Grid-ref= 1, 311
490 290 280 230 200 250 440 530 460 420 530 450
490 290 280 230 200 250 440 530 460 420 530 450
490 290 280 230 200 250 440 530 460 420 530 450
490 290 280 230 200 250 440 530 460 420 530 450
490 290 280 230 200 250 440 530 460 420 530 450
490 290 280 230 200 250 440 530 460 420 530 450
490 290 280 230 200 250 440 530 460 420 530 450
490 290 280 230 200 250 440 530 460 420 530 450
490 290 280 230 200 250 440 530 460 420 530 450
490 290 280 230 200 250 440 530 460 420 530 450
Grid-ref= 1, 312
460 280 260 220 190 240 430 520 450 400 520 410
460 280 260 220 190 240 430 520 450 400 520 410
460 280 260 220 190 240 430 520 450 400 520 410
460 280 260 220 190 240 430 520 450 400 520 410
460 280 260 220 190 240 430 520 450 400 520 410
460 280 260 220 190 240 430 520 450 400 520 410
460 280 260 220 190 240 430 520 450 400 520 410
460 280 260 220 190 240 430 520 450 400 520 410
460 280 260 220 190 240 430 520 450 400 520 410
460 280 260 220 190 240 430 520 450 400 520 410
我已经设法阅读了前 5 行并将这些行添加到列表中。现在,我想阅读包含以下内容的行:
网格参考 = 1, 148
和下面的 10 行,所以它在之前读完:
网格参考 = 1, 311
然后我想将这些行添加到一个新列表中,但是我不想一遍又一遍地创建一个新列表。
到目前为止,它捕获了这两行:
网格参考 = 1, 148
3020 2820 3040 2880 1740 1360 980 990 1410 1770 2580 2630
这是我目前所拥有的:
private void button1_Click(object sender, EventArgs e)
{
var list = new List<string>();
List<string> HeaderParse = new List<string>();
List<string> GridRefList = new List<string>();
var regex = new Regex(@"(Grid-ref)");
using (var sr = new StreamReader("cru-ts-2-10.1991-2000-cutdown.pre"))
{
string line;
while((line = sr.ReadLine()) != null)
{
list.Add(line);
}
for(int a = 0; a < list.Count; a++)
{
if (!regex.IsMatch(list[a]))
{
HeaderParse.Add(list[a]);
}
else
{
break;
}
}
for(int b = 0; b < list.Count; b++)
{
if (regex.IsMatch(list[b]))
{
GridRefList.Add(list[b]);
b++;
if (!regex.IsMatch(list[b]))
{
GridRefList.Add(list[b]);
}
break;
}
}
}
MessageBox.Show("This button has been clicked");
}
我需要有关如何告诉 StreamReader 在匹配后读取接下来的 10 行并在遇到包含“Grid-ref”的新行时创建一个新列表的帮助。
【问题讨论】:
-
这是什么类型的文件?是否有一个已经存在的解析器可用,因此您不必重新发明它?
-
您会一次处理一个标题行之间的这些组吗?
-
另外,您将如何使用带数字的行?可能值得编写一个类来保存每个组中的数据
-
@Igor 这是一个 .pre 文件。
-
@MOMI
StreamReader很好,但是将整个文件读入List只是为了处理List一次一行只是浪费内存。读取并处理每一行并转储List缓冲区。
标签: c# list streamreader