初来乍道,问个比较菜的问题:如何把一文件中指定的内容提取出来?
发布日期:2021-11-10 09:01:15 浏览次数:1 分类:技术文章

本文共 3721 字,大约阅读时间需要 12 分钟。

数据内容如下:  
  72800.000       38.91898908   -77.06621526         40.7516     1112188.776   -4842946.894     3985349.437     6.3756030408e-007     0.82         4.48       8       8     0.00000     0     0     0.000  
  172830.000       38.91898135   -77.06620653         41.6280     1112189.787   -4842947.914     3985349.320     6.4061365069e-007     1.05         4.51       8       8     0.00833     0     0   30.000  
  172860.000       38.91895879   -77.06620348         47.2173     1112191.370   -4842953.626     3985350.883     6.5588341696e-007     1.45         4.09       9       9     0.01667     0     1     0.000  
  172890.000       38.91895839   -77.06620595         47.4124     1112191.202   -4842953.850     3985350.971     6.5682624245e-007     1.46         4.11       9       9     0.02500     0     1   30.000  
  172920.000       38.91896101   -77.06620285         47.2516     1112191.395   -4842953.489     3985351.097     6.5675199614e-007     1.42         4.12       9       9     0.03333     0     2     0.000  
  172950.000       38.91896486   -77.06620350         46.7696     1112191.196   -4842952.875     3985351.126     6.5579189199e-007     1.32         4.14       9       9     0.04167     0     2   30.000  
  172980.000       38.91896559   -77.06620199         46.4309     1112191.253   -4842952.539     3985350.977     6.5487505133e-007     1.28         4.15       9       9     0.05000     0     3     0.000  
  173010.000       38.91896711   -77.06620177         45.8964     1112191.155   -4842952.026     3985350.772     6.5348139453e-007     1.25         4.17       9       9     0.05833     0     3   30.000  
  173040.000       38.91896774   -77.06619940         45.3632     1112191.252   -4842951.533     3985350.492     6.5210196616e-007     1.19         4.18       9       9     0.06667     0     4     0.000  
  173070.000       38.91896760   -77.06619931         45.6531     1112191.313   -4842951.761     3985350.662     6.5307188787e-007     1.23         4.19       9       9     0.07500     0     4   30.000  
  173100.000       38.91896831   -77.06619921         45.5575     1112191.294   -4842951.638     3985350.663     6.5291762658e-007     1.17         4.21       9       9     0.08333     0     5     0.000  
  用什么方法可以把每一行的第一个值那个用科学计数法表示的值给提取出来,最好能给出源码,谢谢了!

 

    用TStringList  
       
    可以很方便的取出每行数据  
   
    var  
        list1   :TStringList  
    begin  
        list1   ;=TStringList.create;  
        list1.loadFrom(filename);  
        ...  
   
 

 

      然后再取   第一个值    
   
 

TStringList

但怎么取值呢,能说的详细吗,谢谢。

你可以单行提取,然后用   '   '做结束标志,单个提取啊

StrToFloat   能够识别科学计数法。

我刚接触DELPHI不太清楚,看帮助里没有写关于Tstringlist有提取一行中某个数据是方法,  

  weixiaohua(我爱Delphi)   你说用''作结束标志,怎么操作呢,能写段代码最好,可以学习一下。  
   
 

function   GetValidStr3   (Str:   string;   var   Dest:   string;   const   Divider:   array   of   Char):   string;  

  const  
        BUF_SIZE   =   20480;   //$7FFF;  
  var  
  Buf:   array[0..BUF_SIZE]   of   char;  
        BufCount,   Count,   SrcLen,   I,   ArrCount:   Longint;  
        Ch:   char;  
  label  
  CATCH_DIV;  
  begin  
      Ch:=#0;//Jacky  
        try  
              SrcLen   :=   Length(Str);  
              BufCount   :=   0;  
              Count   :=   1;  
   
              if   SrcLen   >=   BUF_SIZE-1   then   begin  
                    Result   :=   '';  
                    Dest   :=   '';  
                    exit;  
              end;  
   
              if   Str   =   ''   then   begin  
                    Dest   :=   '';  
                    Result   :=   Str;  
                    exit;  
              end;  
              ArrCount   :=   sizeof(Divider)   div   sizeof(char);  
   
              while   TRUE   do   begin  
                    if   Count   <=   SrcLen   then   begin  
                          Ch   :=   Str[Count];  
                          for   I:=0   to   ArrCount-   1   do  
                                if   Ch   =   Divider[I]   then  
                                      goto   CATCH_DIV;  
                    end;  
                    if   (Count   >   SrcLen)   then   begin  
                          CATCH_DIV:  
                          if   (BufCount   >   0)   then   begin  
                                if   BufCount   <   BUF_SIZE-1   then   begin  
                                      Buf[BufCount]   :=   #0;  
                                      Dest   :=   string   (Buf);  
                                      Result   :=   Copy   (Str,   Count+1,   SrcLen-Count);  
                                end;  
                                break;  
                          end   else   begin  
                                if   (Count   >   SrcLen)   then   begin  
                                      Dest   :=   '';  
                                      Result   :=   Copy   (Str,   Count+2,   SrcLen-1);  
                                      break;  
                                end;  
                          end;  
                    end   else   begin  
                          if   BufCount   <   BUF_SIZE-1   then   begin  
                                Buf[BufCount]   :=   Ch;  
                                Inc   (BufCount);  
                          end;//   else  
                                //ShowMessage   ('BUF_SIZE   overflow   !');  
                    end;  
                    Inc   (Count);  
              end;  
        except  
              Dest   :=   '';  
              Result   :=   '';  
        end;  
  end;  
   
  上面这个函数功能就是你需要的.使用方法如下  
  tStr   :=   GetValidStr3(tStr,   s18,   ['   ',   #9]);  
  tStr   :=   GetValidStr3(tStr,   s1C,   ['   ',   #9]);  
  tStr   :=   GetValidStr3(tStr,   s20,   ['   ',   #9]);  
  提取出来在转换成数就行了.

weixiaohua(我爱Delphi)   谢谢你的回复,但这个函数对于初期的我来说有点难度,看不明白,不知有没有相对简单一点的方法,要是没有我就放分结贴了,。  

  第一次来这里就看到这么多热心的人,很感谢大家,也感谢CSDN。。

你不用管那个函数的具体实现.  

  假如你的数据在DataList中.  
  DataList   :=   TStringList.Create;  
  DataList.LoadFromFile('X:\XX.txt');  
  for   I   :=   DataList.count   -   1   do  
  begin  
      sLine   :=   DataList.Strings[I];  
      sLine   :=   GetValidStr3(sLine,   str1,   ['   ',   #9]);     //假如第一行   str1   :=   72800.000;  
      //sLine   :=   GetValidStr3(sLine,   str1,   ['   ',   #9]);   //在执行一次   str1   :=   38.91898908   你可以依此类推.  
      StrToFloat(str1);   //转换后就是你需要的数了.  
  end;  
 

up

weixiaohua(我爱Delphi)  谢谢了,分已送出请查收。。

转载于:https://www.cnblogs.com/delphi2007/archive/2008/11/18/1335908.html

转载地址:https://blog.csdn.net/aibi9196/article/details/101304683 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:一个非常奇怪的问题,高手请进!!(在线等。。。。。)
下一篇:窗体form失去焦点时(非激活状态),发生什么事件

发表评论

最新留言

留言是一种美德,欢迎回访!
[***.207.175.100]2024年04月08日 13时07分51秒