• Delphi TextFile读取文本文件


    unit Unit1;
    
    interface
    
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;
    
    type
      TForm1 = class(TForm)
        Memo1: TMemo;
        Button1: TButton;
        Button2: TButton;
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
        procedure Button3Click(Sender: TObject);
      p rivate
        { P rivate declarations }
      public
        { Public declarations }
      end;
    
    var
      Form1: TForm1;
    
    implementation
    
    {$R *.dfm}
    //{$APPTYPE CONSOLE}
    
    procedure TForm1.Button1Click(Sender: TObject);
    var
      txt:TextFile;
      s:string;
      path:string;
    begin
      path:=ExtractFilePath(Application.ExeName);
      AssignFile(txt,path+'	est.txt');
      //Writeln(path+'	est.txt');
      Reset(txt);   //读打开文件,文件指针移到首
      Memo1.Clear;
      while not Eof(txt) do
      begin
        Readln(txt,s);
        Memo1.Lines.Add(s);
      end;
      CloseFile(txt);
    end;
    
    procedure TForm1.Button2Click(Sender: TObject);
    var
      txt:TextFile;
      s:string;
      path:string;
    begin
      path:=ExtractFilePath(Application.ExeName);
      Memo1.Clear;
      AssignFile(txt,path+'	est.txt');
      Append(txt);  //写打开文件,指针到尾
      Writeln(txt,'这是猪悟能写入的文本');  //写入一行带行结束标志
      CloseFile(txt);
    
    end;
    
    procedure TForm1.Button3Click(Sender: TObject);
    var
      txt:TextFile;
      s,path:string;
    begin
      path:=ExtractFilePath(Application.ExeName);
      Memo1.Clear;
      AssignFile(txt,path+'	est.txt');
      Reset(txt);
    
      Readln(txt,s);
      //Memo1.Lines.Add(IntToStr(FileSize(txt)));
      Memo1.Lines.Add(s);
      CloseFile(txt);
    end;
    
    end.
    procedure TForm1.Button1Click(Sender: TObject); 
    
    var 
    
    MyFile:TMemoryStream; 
    
    Filebuf: array[1..10] of char; //这里声明的是静态数组 
    
    a:string; 
    
    Begin 
    
    If opendialog1.Execute then 
    
    begin 
    
    MyFile:=TMemoryStream.Create;//创建流 
    
    MyFile.LoadFromFile(opendialog1.FileName); 
    
    MyFile.ReadBuffer(Filebuf,10);//读取TXT文件前10个字符 
    
    a:= strpas(Filebuf) //将数组转化成为字符串 
    
    Form1.canvas.Textout(0,0,a); //在显示区域上显示字符串 
    
    FreeAndNil(MyFile);//释放流 
    
    end; 
    
    end; 
    以上范例在窗体Form1上显示的字符串就是打开TXT文本的前10个字符,但是如何得到文本的所有数据呢?这里就需要用到动态数组。动态数组在流中 的应用是个难点,因为Delphi中的静态数组是在运行前就已经将内存空间分配好,所以它的变量地址就是数组的第一维地址,即没有描述部份,故它的 sizeof为1个字节,而动态数组是在运行期间动态分配一个内存块,所以它的变量地址部分需要一个描述部分,故它的sizeof为四个字节,用于存放描 述表,所以在用 Readbuffer方法时,需要采用数组的第一维地址为起始地址,才不会导致内存溢出。下面这个范例就是用流来读取TXT文件中的全部数据。 
    procedure TForm1.Button1Click(Sender: TObject); 
    
    var 
    
    MyFile:TMemoryStream; 
    
    Filebuf: array of pchar; //这里声明的是动态数组 
    
    iLen:Int64; 
    
    Begin 
    
    If opendialog1.Execute then 
    
    begin 
    
    iLen:=0; 
    
    MyFile:=TMemoryStream.Create; 
    
    MyFile.LoadFromFile(opendialog1.FileName); 
    
    iLen:=MyFile.Size;//获得指定TXT文件的大小 
    
    SetLength(FileBuf,iLen);//设置动态数组的长度为TXT文件的大小 
    
    MyFile.ReadBuffer(FileBuf[0],iLen);//读取TXT文件全部数据 
    
    Form1.canvas.Textout(0,0,string(FileBuf)); //在显示区域上显示字符串; 
    
    FreeAndNil(MyFile); 
    
    end; 
    
    end; 
    以上的范例可在窗体Form1上显示指定TXT文件的全部数据。 
    
    现在让我们来研究一下如何从TXT文本中的指定位置读取一定量的数据,这里用到的函数就是seek(offset:integer,origin:word)integer; 它的参数所代表的意义: offset是偏移量; 
    
    而origin是计算方式 ,下面三个就是origin的值,soFromBeginning是从文件头开始计算,soFromCurrent是从当前位置开始计算,而soFromEnd Offset是从最后位置开始计算。 
    
    下面这个范例就是从TXT文本中的指定位置取一定量的数据 
    
    procedure TForm1.Button1Click(Sender: TObject); 
    
    var 
    
    MyFile:TMemoryStream; 
    
    Filebuf: array of pchar; //这里声明的是动态数组 
    
    iLen:Int64; 
    
    Begin 
    
    If opendialog1.Execute then 
    
    begin 
    
    iLen:=0; 
    
    MyFile:=TMemoryStream.Create; 
    
    MyFile.LoadFromFile(opendialog1.FileName); 
    
    iLen:=MyFile.Size; 
    
    SetLength(FileBuf,1024);//设置动态数组的长度; 
    
    Myfile.Seek(1024, soFromBeginning);//从文件头开始计算到1024个字节处 
    
    MyFile.ReadBuffer(FileBuf[0],1024);//从seek设置的当前位置往后读取1024字节 
    
    Form1.canvas.Textout(0,0,string(FileBuf)); //在窗体上显示; 
    
    FreeAndNil(MyFile); 
    
    end; 
    
    end
  • 相关阅读:
    SPOJ ROCK
    CodeForces 4C
    实现与研华PCI采集卡通讯
    C#常用数据结构
    使用USBCAN通讯
    COMMTIMEOUTS读写串行口超时
    Multithreading With C# Cookbook---Chapter5---使用C#6.0
    Multithreading With C# Cookbook---Chapter4---使用任务并行库
    Multithreading With C# Cookbook---Chapter3---线程池
    Multithreading With C# Cookbook---Chapter2---线程同步
  • 原文地址:https://www.cnblogs.com/blogpro/p/11339754.html
Copyright © 2020-2023  润新知