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.为文本文件制 ...
随机推荐
- 从有状态应用(Session)到无状态应用(JWT),以及 SSO 和 OAuth2
不管用哪种方式认证用户,都可能被中间人攻击窃取 SessionID 或 Token,从而发生 CSRF 攻击.解决方式就是全站 HTTPS.现在 Let's Encrypt 已经支持免费的通配符 HT ...
- LeetCode 112. Path Sum 动态演示
给一个目标值,判断一棵树从根到叶子是否至少有一条路径加起来的和等于目标值 比较典型的深度优先算法. 引入一个全局变量bResult, 一旦找到一条,就不再搜索其他的了. class Solution ...
- Linux多线程服务器端编程
目录 Linux多线程服务器端编程 线程安全的对象生命期管理 对象的销毁线程比较难 线程同步精要 借shared_ptr实现写时拷贝(copy-on-write) 多线程服务器的适用场合与常用编程模型 ...
- Waiter.js
var Waiter = function() { var dfd = [], doneArr = [], failArr = [], slic ...
- mysql DATETIME和TIMESTAMP类型
以mysql 5.7.20 为例 一直以来,理解有偏差,作此记录,纠正 一.DATETIME和TIMESTAMP 都有高达微秒(6位)的精度 范围 DATETIME 1000-01-01 00: ...
- P3914染色计数
题目描述 有一颗\(N\)个节点的树,节点用\(1,2,\cdots,N\)编号.你要给它染色,使得相邻节点的颜色不同.有\(M\)种颜色,用\(1,2,\cdots,M\)编号.每个节点可以染\(M ...
- pjhp实现使用redis来存储session数据
#设置php处理session的方式为redis,并配置redis的访问地址(因为在redis中绑定的访问地址为127.0.0.1,所以就没有设置访问密码,如果需要请自行搜索)#因为不想修改php.i ...
- vmware 15安装centos 7.6
环境: Vmware 15 centos 7.6.1810(CentOS-7-x86_64-DVD-1810.iso) centos:centos是linux发行版之一,开源,免费,安装的iso可以向 ...
- 【Vue 2.X】基于ElementUI 实现 dialog弹窗移动效果-自定义指令系列(二)
v-dialogDrag: 弹窗拖拽 使用: <el-dialog XXX v-dialogDrag></el-dialog> Vue.directive('dialogDra ...
- Hibernate4教程二:基本配置(2)
<hibernate-mapping>元素 这个元素是xxx.hbm.xml配置的根元素,定义如下: java代码: <hibernate-mapping schema=" ...