使用跨平台图表控件TeeChart如何从DAT或TEXT文件中导入数据
大多数开发人员在使用TeeChart进行开发的时候,都需要访问包含在文本文档中的一些数据,本次教程将详细讲解如何去实现这一步骤。
文本文件通常包含使用空格键或者是TAB键分隔开的数字和文字:
TeeChart官方最新版免费下载地址
比如下面的文本,包含两个字段,使用空格作为字段分隔:
0.1 24
0.5 143
0.2 321
0.1 100
从一个文本文件读取数据(如果列分隔符是正确的),开发者可以使用TSeriesTextSource组件,可以根据自身的数据设置ileName、Fields和FieldSeparator属性。然后只需通过设置TSeriesTextSource.Series或Series.DataSource属性将系列文本源组件连接到一个图表系列。
1 创建一个新的应用程序。 (File->New->Application)
2 从"Additional"面板选项卡中拖放TChart组件。
3 双击Chart1组件显示TeeChart编辑对话框。(或右键单击Chart1并单击"Edit...")
4 单击"Add..." 按钮,选择"Line"系列风格,单击OK按钮。(或双击"Line"图表)
5 关闭编辑器对话框(或按Esc键关闭它)。
6 找到“TeeChart”组件面板选项卡并拖放SeriesTextSource组件。
7 双击SeriesTextSource1组件显示编辑器对话框,填写以下属性:
VCL代码:
unit UImportData; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, TeEngine, Series, TeeURL, TeeSeriesTextEd, ExtCtrls, TeeProcs, Chart, StdCtrls, Buttons; type TForm1 = class(TForm) Chart1: TChart; Series1: TLineSeries; SeriesTextSource1: TSeriesTextSource; Panel1: TPanel; BitBtn1: TBitBtn; procedure BitBtn1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.BitBtn1Click(Sender: TObject); begin with SeriesTextSource1 do begin // Setup fields (columns in text file) Fields.Clear; AddField('X',1); AddField('Y',2); // Set separators FieldSeparator := ' '; DecimalSeparator := '.'; // Set file name containing text data FileName := 'test.dat'; // Series to add data Series := Series1; // Load data from file into Series Active := True; end; // Example of setting axes scales. // Not necessary is axes already have Automatic:=True. Series1.GetVertAxis.SetMinMax(0,1); Series1.GetHorizAxis.SetMinMax(3864.90,3865.50); end; end. Displaying the SeriesTextSource editor dialog If you wish to show the SeriesTextSource editor dialog at runtime, simply drop a button and type this code at Button1Click event: procedure TForm1.Button1Click(Sender: TObject); begin // This procedure is located at TeeSeriesTextEd.pas unit: TeeEditSeriesTextSource(SeriesTextSource1); end;