是否可以绘制从richTextBox收集的数据图?例如,我在richTextBox中有以下文本:
$GPRMC,152908.00,A,5307.0794359,N,02308.8918827,E,0.049,188.6,280612,0.0,E,D*3A
$GPRMC,152909.00,A,5307.0794307,N,02308.8918792,E,0.081,193.3,280612,0.0,E,D*3A
$GPRMC,152910.00,A,5307.0794343,N,02308.8918811,E,0.034,42.9,280612,0.0,E,D*0F
$GPRMC,152911.00,A,5307.0794410,N,02308.8918827,E,0.099,1.3,280612,0.0,E,D*30
$GPRMC,152912.00,A,5307.0794461,N,02308.8918808,E,0.055,331.9,280612,0.0,E,D*32
我希望情节图表例如纬度(时间):
5307.0794359 -> 152908.00
5307.0794307 -> 152909.00
5307.0794343 -> 152910.00
5307.0794410 -> 152911.00
5307.0794461 -> 152912.00
我不知道如何编写一个函数,它将从行[1,2,3,4,5]中检索纬度,从行[1,2,3,4,5]中检索时间。然后绘制图表。
我需要一个通用功能,因为我可以拥有100行或400行等数据。
任何人都可以帮助我吗?向我提供任何帮助(代码,示例,提示或链接)。
答案 0 :(得分:0)
假设:
richTextBox
是System.Windows.Forms.RichTextBox
类的实例; chart
是System.Windows.Forms.DataVisualization.Charting.Chart
类的实例。以下方法用于解析string
s:
private static readonly CultureInfo EnglishCulture = CultureInfo.GetCultureInfo("en-US");
private static Tuple<double, double>[] GetData(string[] lines)
{
return Array.ConvertAll(lines, line =>
{
string[] elems = line.Split(',');
return new Tuple<double, double>(double.Parse(elems[3], EnglishCulture), double.Parse(elems[1], EnglishCulture));
});
}
用法:
var data = GetData(richTextBox.Lines);
现在您只需要将此data
数组绑定为图表DataSource
,或者手动将它们添加到系列中,如下所示:
chart.Series.Clear();
Series series = new Series("sample") { ChartType = SeriesChartType.Line, BorderWidth = 2, MarkerSize = 5, MarkerStyle = MarkerStyle.Square };
foreach (var p in data)
series.Points.Add(p.Item1, p.Item2);
chart.Series.Add(series);
答案 1 :(得分:0)
我找到了问题的答案。我在Dmitry创建的代码中改变了“一条小”的一行。 这是:
以前的代码:
private static readonly CultureInfo EnglishCulture = CultureInfo.GetCultureInfo("en-US");
新代码(刚刚在CultureInfo之前添加 System.Globalization。)并且它适用于Visual Studio 2012 Ultimate),在更改之前我有错误“未找到CultureInfo”:
private static readonly System.Globalization.CultureInfo EnglishCulture = CultureInfo.GetCultureInfo("en-US");
我不知道为什么之前的代码对我不起作用..也许是通过Visual System版本。但是现在所有的工作都很好,这很有趣,因为它现在也适用于以前的代码,并且与新的更改相同。我不知道发生了什么,但一切都很好。
感谢德米特里,感谢您的帮助。
PS。 VERRY重要(开头我们必须声明这一点):
using System.Globalization;