如何从文件中提取指定位置的数据???? VCL组件开发及应用http://www.delphi2007.net/DelphiVCL/html/delphi_20061225204715115.html
数据如下:
BEGIN OF EPOCH (GPS / UTC) : 172800.0 2006 12 12 0 0 0.0
PLH (DDMMSS.SS) Clk ZTD (m) : 385508.36127 -770358.37552 40.803 -191.177 0.095
XYZ (m) : 1112188.769 -4842946.925 3985349.484
Satellites tracked / used : 8 8
GDOP PDOP HDOP VDOP TDOP : 2.3 2.0 1.1 1.7 1.1
Sigma PLH Clk (m) : 1.700 1.254 3.432 58.702
END OF EPOCH (GPS / UTC) : 172800.0 2006 12 12 0 0 0.0
BEGIN OF EPOCH (GPS / UTC) : 172830.0 2006 12 12 0 0 30.0
PLH (DDMMSS.SS) Clk ZTD (m) : 385508.34732 -770358.35977 41.236 -191.708 0.095
XYZ (m) : 1112189.274 -4842947.432 3985349.421
Satellites tracked / used : 9 8
GDOP PDOP HDOP VDOP TDOP : 2.3 2.0 1.1 1.7 1.1
Sigma PLH Clk (m) : 1.203 0.887 2.439 1.869
END OF EPOCH (GPS / UTC) : 172830.0 2006 12 12 0 0 30.0
BEGIN OF EPOCH (GPS / UTC) : 172860.0 2006 12 12 0 1 0.0
PLH (DDMMSS.SS) Clk ZTD (m) : 385508.34119 -770358.34916 41.441 -192.052 0.095
XYZ (m) : 1112189.586 -4842947.645 3985349.403
Satellites tracked / used : 9 8
GDOP PDOP HDOP VDOP TDOP : 2.3 2.0 1.1 1.7 1.1
Sigma PLH Clk (m) : 0.982 0.725 2.000 1.559
END OF EPOCH (GPS / UTC) : 172860.0 2006 12 12 0 1 0.0
需要从以上的数据中提取PLH (DDMMSS.SS) Clk ZTD (m) : 后面的3个值,即第1段的385508.36127 -770358.37552 40.803这三个值,数据中很很多这样的小段,面需要从每一段中取出这三个值来,怎么才能实现呢?
最好有源码,谢谢了。。
procedure ReadLn([ var F: Text; ] V1 [, V2, ...,Vn ]);
READLN把数据读上来后,怎么判断哪个是我要的数据呢,能说的详细点吗
我的做法可能比较笨(借助TStringList类和Pos、Copy函数)
procedure TForm1.Button1Click(Sender: TObject);
var
SList, SLtemp : TStringList;
I : integer;
S, sTemp : string;
begin
S := 'PLH (DDMMSS.SS) Clk ZTD (m) : ' ; //这是标志串,前面没有空格,如有,则要另加处理
SList := TStringList.Create; //创建两个StringList--SList和SLtemp
SLtemp := TStringList.Create; //
SList.LoadFromFile('c:\src.txt'); //把c:\src.txt的内容导入SList
for I := 0 to SList.Count-1 do
if Pos(S,SList[I]) > 0 then //如果一行中有标志串则做以下处理
begin
{ 把此行的标志串去掉后赋值给sTemp这个字符串 }
sTemp := StringReplace(SList[I],S,'',[rfReplaceAll]);
{ 把sTemp 串中的双空格替换为换行符,然后把sTemp赋值给字符串列表SLtemp }
SLtemp.Text := StringReplace(sTemp,' ',#10,[rfReplaceAll]);
{ 输出SLtemp 中前三个值到一个memo里 }
memo1.Lines.Add( SLtemp[0] + ',' + SLtemp[1] + ',' + SLtemp[2] );
end;
SLtemp.Free;//释放用过的两个字符串列表
SList.Free;
end;
注意,前提是你的文本数据要有一定的格式,如:三个数字串之间都需要是用两个空格做间隔。
另外,我假设你是把数据存放在了一个TXT文件中。
楼主测试时,如果失败,就从一些细节上找原因(如空格问题)
我的输出结果是:
385508.36127,-770358.37552,40.803
385508.34732,-770358.35977,41.236
385508.34119,-770358.34916,41.441
lihuasoft(学习低调做人) 谢谢了,你的方法可以实现。
分已送出,请查收。。
分已收到. 也谢谢楼主, 因为你是一个负责任的人. 虽然已暗下决心2007年不再抢分, 但仍然对似你这样及时结贴的人表示敬意