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+'\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读取文本文件的更多相关文章
- Delphi 快速读取TXT 指定行的数据
http://blog.csdn.net/MichaelJScofield/article/details/41869785 Delphi 快速读取TXT 指定行的数据 分类:Delphi个人挫品 ( ...
- python读取文本文件
1. 读取文本文件 代码: f = open('test.txt', 'r') print f.read() f.seek(0) print f.read(14) f.seek(0) print f. ...
- (转) Java读取文本文件中文乱码问题
http://blog.csdn.net/greenqingqingws/article/details/7395213 最近遇到一个问题,Java读取文本文件(例如csv文件.txt文件等),遇到中 ...
- DELPHI下读取与设置系统时钟
在DELPHI下读取与设置系统时钟 很多朋友都想在自己的程序中显示系统时间 这在DELPHI中十分容易 利用DateToStr(Date)及TimeToStr(Time)函数即可实现. 二者的函数原型 ...
- Java读取文本文件中文乱码问题 .转载
最近遇到一个问题,Java读取文本文件(例如csv文件.txt文件等),遇到中文就变成乱码.读取代码如下: List<String> lines=new ArrayList<Stri ...
- Java基础知识强化之网络编程笔记10:TCP之客户端读取文本文件服务器控制台输出
1. TCP之客户端读取文本文件服务器控制台输出 (1)客户端:(发送数据到服务端) package cn.itcast_10; import java.io.BufferedReader; impo ...
- Delphi TcxTreeList 读取 TcxImageComboBoxItem类型的值
Delphi TcxTreeList 读取 TcxImageComboBoxItem类型的值: Node.Values[wiNodeLevel.ItemIndex]://值 Node.Texts[ ...
- StreamReader 读取文本文件乱码问题
解决读取文本文件乱码问题.我采取的是读取前先判断文本文件格式. StreamReader sr = new StreamReader(fullfileName, GetFileEncodeType(f ...
- python读取文本文件数据
本文要点刚要: (一)读文本文件格式的数据函数:read_csv,read_table 1.读不同分隔符的文本文件,用参数sep 2.读无字段名(表头)的文本文件 ,用参数names 3.为文本文件制 ...
随机推荐
- 使用pgAdmin3将postgreSQL中的数据导出insert格式的sql文件
第一步: 第二步: 第三步: 第四步: 成功:
- Altium Designer chapter1总结
第一章操作基础中有以下几点需要注意: (1)随着DSP.ARM.FPGA等高速逻辑元件的应用,PCB的信号完整性与抗干扰性能显得尤为重要. (2)Altium Designer的发展史:Protel ...
- 关于public private protected访问修饰符
这个似乎都是老生常谈了,特别是找工作第一轮笔试的时候很爱考这些,再罗列一次,特别要注意继承的情况: 默认状态:即是不加修饰符的时候,所谓的default状态,在类内部可以被访问,在相同的包下面 ...
- xml&dom_sax&dom4j的常见操作
<? xml version =”1.0” encoding=”GB2312”?> <!-- 学生信息—><?xml-stylesheet type=”text/css” ...
- tornado后台小框架
import tornado.ioloop import tornado.web """使用get方法提交过来数据就是用get方法,使用post执行post方法这个框架的 ...
- elasticsearch 深入 —— Search After实时滚动查询
Search After 一般的分页需求我们可以使用form和size的方式实现,但是这种分页方式在深度分页的场景下应该是要避免使用的.深度分页会随着请求的页次增加,所消耗的内存和时间的增长也是成比例 ...
- mysql的一些基本常识
1.主键的选取 主键的字段不能有null存在 主键应该使用bigint自增,而不是int 主键的选取默认为id 联合主键:就是多个字段被设置为主键,这里主键字段的值是允许相同的,只要不是所有字段相同即 ...
- MySQL MHA + Ifconfig管理vip
前期的安装步骤,还是参照:http://www.cnblogs.com/yiyuf/p/4104354.html进行,只需要把appxxx.cnf中定义的相关.sh脚本(如:master_ip_fai ...
- 利用jmeter发起java请求调用shell脚本
1.创建maven项目 在pom文件中加入依赖: 2.在路径src/main/java下创建类,如类名shellclass 3. 创建jmet ...
- 洛谷P4331[BOI2004] sequence
博客复活? 这个题很模板啊.随便上个左偏树.之前第一遍写对了.然后今天翻出来又写了一遍发现了一个奇奇怪怪的问题. 对比如下 上面的是AC 下面的WA 真的是一个很蠢的问题...你TM堆顶都弹出来了,堆 ...