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.为文本文件制 ...
随机推荐
- Mongodb php扩展及安装
Mongodb php扩展 Mongodb安装 1: 下载mongodb www.mongodb.org 下载最新的stable版 2: 解压文件 3: ...
- GitLab 安装,配置及维护
参考: GitLab 官方文档 docker-gitlab,通过 docker-compose 快速安装 GitLab rake,是 Rails 的工具,类似 ruby 中常用的的 make.通过 R ...
- hdu2602Bone Collector ——动态规划(0/1背包问题)
Problem Description Many years ago , in Teddy’s hometown there was a man who was called “Bone Collec ...
- Spring框架中Spring配置文件中<context:annotation-config/>标签说明
<context:annotation-config/>此标签的重要作用就是: 省去系统繁琐的注解标签,加上一个此标签,就可以在此项目程序添加“注解”的功能,使系统识别相应的注解功能!! ...
- Android手机、电视(盒子) 打开ADB调试 一览表
手机.电视(盒子) 打开ADB调试 一览表 一.手机打开ADB调试方法 序号 名称 描述 方式 1 华为手机 EMUI 1.设置 ->关于手机-> 版本号 点击(4~5次)2.返回设置 - ...
- 攻防世界--insanity
测试文件:https://adworld.xctf.org.cn/media/task/attachments/d2a7dde552e647688230e80b2767b912 1.准备 获得信息: ...
- Android禁止输入表情符号
在我们Android开发的项目中,难免有要求在输入框中禁止输入表情,所以呢,写了一个输入框禁止输入表情的demo,供大伙参考 效果图 如图显示,如果用户输入了表情字符,会提示. EmojiFilter ...
- 源码分析--ArrayList(JDK1.8)
ArrayList是开发常用的有序集合,底层为动态数组实现.可以插入null,并允许重复. 下面是源码中一些比较重要属性: 1.ArrayList默认大小10. /** * Default initi ...
- 转载一篇别人分享的VSFTPD.CONF的中文解释方便以后查询
# 服务器以standalong模式运行,这样可以进行下面的控制 listen=YES # 接受匿名用户 anonymous_enable=YES # 匿名用户login时不询问口令 no_anon_ ...
- Django——Ajax相关
Ajax简介 AJAX(Asynchronous Javascript And XML)翻译成中文就是“异步Javascript和XML”.即使用Javascript语言与服务器进行异步交互,传输的数 ...