绘图图使用值从richTextBox c#

本文关键字:richTextBox 绘图 | 更新日期: 2023-09-27 17:53:08

是否可以绘制从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行等数据

有人能帮我吗?计数对我任何帮助(代码,示例,提示或链接)。

绘图图使用值从richTextBox c#

假设:

  • richTextBoxSystem.Windows.Forms.RichTextBox类的实例;
  • chartSystem.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);

我找到了问题的答案。我在Dmitry创建的代码中"稍微"修改了一行。

之前代码:

private static readonly CultureInfo EnglishCulture = CultureInfo.GetCultureInfo("en-US");

新代码(刚刚添加了System.Globalization。在CultureInfo之前),它在Visual Studio 2012 Ultimate上工作),在更改之前,我有错误"CultureInfo未找到":

private static readonly System.Globalization.CultureInfo EnglishCulture = CultureInfo.GetCultureInfo("en-US");

我不知道为什么以前的代码对我不起作用…也许是Visual System版本。然而,现在一切都工作得很好,而且很有趣,因为现在它也可以在以前的代码上工作,对于新的更改也是如此。我不知道发生了什么事,但一切都很好。

谢谢Dmitry,谢谢你的帮助。

p。非常重要(必须在开头声明):

using System.Globalization;