现在的位置: 首页 > 综合 > 正文

如何从文件中提取指定位置的数据????

2013年07月11日 ⁄ 综合 ⁄ 共 2952字 ⁄ 字号 评论关闭
如何从文件中提取指定位置的数据???? 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年不再抢分,   但仍然对似你这样及时结贴的人表示敬意

抱歉!评论已关闭.