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+'\test.txt');
//Writeln(path+'\test.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+'\test.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+'\test.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[..] of char; //这里声明的是静态数组 

a:string; 

Begin 

If opendialog1.Execute then 

begin 

MyFile:=TMemoryStream.Create;//创建流 

MyFile.LoadFromFile(opendialog1.FileName); 

MyFile.ReadBuffer(Filebuf,);//读取TXT文件前10个字符 

a:= strpas(Filebuf) //将数组转化成为字符串 

Form1.canvas.Textout(,,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:=; 

MyFile:=TMemoryStream.Create; 

MyFile.LoadFromFile(opendialog1.FileName); 

iLen:=MyFile.Size;//获得指定TXT文件的大小 

SetLength(FileBuf,iLen);//设置动态数组的长度为TXT文件的大小 

MyFile.ReadBuffer(FileBuf[],iLen);//读取TXT文件全部数据 

Form1.canvas.Textout(,,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:=; 

MyFile:=TMemoryStream.Create; 

MyFile.LoadFromFile(opendialog1.FileName); 

iLen:=MyFile.Size; 

SetLength(FileBuf,);//设置动态数组的长度; 

Myfile.Seek(, soFromBeginning);//从文件头开始计算到1024个字节处 

MyFile.ReadBuffer(FileBuf[],);//从seek设置的当前位置往后读取1024字节 

Form1.canvas.Textout(,,string(FileBuf)); //在窗体上显示; 

FreeAndNil(MyFile); 

end; 

end

Delphi TextFile读取文本文件的更多相关文章

  1. Delphi 快速读取TXT 指定行的数据

    http://blog.csdn.net/MichaelJScofield/article/details/41869785 Delphi 快速读取TXT 指定行的数据 分类:Delphi个人挫品 ( ...

  2. python读取文本文件

    1. 读取文本文件 代码: f = open('test.txt', 'r') print f.read() f.seek(0) print f.read(14) f.seek(0) print f. ...

  3. (转) Java读取文本文件中文乱码问题

    http://blog.csdn.net/greenqingqingws/article/details/7395213 最近遇到一个问题,Java读取文本文件(例如csv文件.txt文件等),遇到中 ...

  4. DELPHI下读取与设置系统时钟

    在DELPHI下读取与设置系统时钟 很多朋友都想在自己的程序中显示系统时间 这在DELPHI中十分容易 利用DateToStr(Date)及TimeToStr(Time)函数即可实现. 二者的函数原型 ...

  5. Java读取文本文件中文乱码问题 .转载

    最近遇到一个问题,Java读取文本文件(例如csv文件.txt文件等),遇到中文就变成乱码.读取代码如下: List<String> lines=new ArrayList<Stri ...

  6. Java基础知识强化之网络编程笔记10:TCP之客户端读取文本文件服务器控制台输出

    1. TCP之客户端读取文本文件服务器控制台输出 (1)客户端:(发送数据到服务端) package cn.itcast_10; import java.io.BufferedReader; impo ...

  7. Delphi TcxTreeList 读取 TcxImageComboBoxItem类型的值

    Delphi  TcxTreeList 读取  TcxImageComboBoxItem类型的值: Node.Values[wiNodeLevel.ItemIndex]://值 Node.Texts[ ...

  8. StreamReader 读取文本文件乱码问题

    解决读取文本文件乱码问题.我采取的是读取前先判断文本文件格式. StreamReader sr = new StreamReader(fullfileName, GetFileEncodeType(f ...

  9. python读取文本文件数据

    本文要点刚要: (一)读文本文件格式的数据函数:read_csv,read_table 1.读不同分隔符的文本文件,用参数sep 2.读无字段名(表头)的文本文件 ,用参数names 3.为文本文件制 ...

随机推荐

  1. Mybatis入门之MyBatis项目案例

    一.项目案例演示 后台管理系统用户数据维护平台 所有用户数据查询 单个用户数据查询 用户数据修改(完善资料) 锁定用户账号 删除用户账号 彻底删除用户账号 二.数据库数据准备工作 数据库:mysql ...

  2. tomcat 迁移到weblogic 问题

    问题1: Caused by: java.lang.UnsupportedClassVersionError: com/audaque/datadiscovery/soap/service/impl/ ...

  3. Nginx 官网文档翻译汇总

    Nginx 官网文档,各个模块的手册在这里. Nginx 中文文档 - 淘宝翻译 改版后的新 Nginx 官网文档 概述 新手指南 控制 Nginx 管理员指南 Admin Guide 安装 基本功能 ...

  4. vlan trunk配置

    vlan trunk配置 Trunk:中继干道 作用:一条链路能承载多个vlan的流量,并对不同vlan的流量进行不同标记 trunk能够使vlan跨越交换机 PT配置 配置vlan:两台交换机同样的 ...

  5. 性能工具之JMeter+InfluxDB+Grafana打造压测可视化实时监控

    一.安装配置InfluxDB InfluxDB是GO语言开发的一个开源分布式时序数据库,非常适合存储指标.事件.分析等数据.有人做过mysql和influxDB对比,存储1000万条数据mysql要7 ...

  6. Apache Commons 工具类介绍及简单使用(转载)

    原文链接 http://www.cnblogs.com/younggun/p/3247261.html Apache Commons包含了很多开源的工具,用于解决平时编程经常会遇到的问题,减少重复劳动 ...

  7. securecrt(CRT)导入会话

    securecrt是个非常流行的远程管理维护工具,支持fssh.ssh2.telnet等多种协议,也支持中文.设备管理多了,自行手工添加也是很累的活.偷下懒,从别人那复制下文件,倒入到自己的secur ...

  8. 深入理解DiscoveryClient

    Spring Cloud Commons 提供的抽象 最早的时候服务发现注册都是通过DiscoveryClient来实现的,随着版本变迁把DiscoveryClient服务注册抽离出来变成了Servi ...

  9. python学习第十一天列表的分片和运算

    列表的分片也叫切片,也就是从列表中取出一段赋值给另外一个变量,列表运算就是可以进行比较运算,连接运算,乘法运算等. 1,列表的分片 n1=[1,2,3,4,5,6,7,8,9] n2=[1:3] 包含 ...

  10. BUUCTF--不一样的flag

    测试文件:https://buuoj.cn/files/91b89e765c9aff8e82690c0868975b37/0bf39b5d-5f2f-4095-a921-fb5c20f53f21.zi ...