本文整理自网络,侵删。
procedure TForm1.Button1Click(Sender: TObject);varfi:TextFile; //system单元中有textfile数据类型的定义a1:string;i:integer;strsql:string;begini:=1;strsql:='';AssignFile(fi,'e:\22.txt');Reset(fi);while not Eof(fi) dobeginReadln(fi,a1);strsql:=strsql+a1;if (i mod 2=0) thenbegin//showmessage(strsql);strsql:='';end;i:=i+1;end;CloseFile(fi);end;这里的关键是:while not eof(fi) do ,在这个循环里可以逐条取得数据。
Delphi 支持三种文件类型: 文本文件、记录文件、无类型文件。
文本文件是以行为单位进行读、写的。由于每一行的长度不一定相同,不能计算出给定行在文件中的确切位置,因而只能顺序地读写。
文本文件只能单独为读或写而打开,在一个打开的文本文件上同时进行读、写操作是不允许的。
文本文件的打开需要两个步骤:1.文件变量与文件名关联;2.初始化读写。
1.文件变量与文件名关联:AssignFile(VarTxt, FileName);FileName 如果省略路径将默认当前目录。
2.初始化读写有三种方式:(1) Reset: 只读打开, 指针移到文件头;(2) Rewrite: 创建新文件并打开, 只写;(3) Append: 从尾部追加, 指针当然在文件尾。
文件不存在时使用 Reset 或 Append 会引发一个I/O异常。
最后用 CloseFile 关闭文件。
为保持兼容,Delphi 也允许用户用 Assign 建立关联, 用 Close 关闭文件。
--------------------------------------------------------------------------------
//读写示例:unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type TForm1 = class(TForm)Memo1: TMemo;Button1: TButton;Button2: TButton;Button3: TButton;Button4: TButton;Button5: TButton;Button6: TButton;Button7: TButton;procedure Button1Click(Sender: TObject);procedure Button2Click(Sender: TObject);procedure Button3Click(Sender: TObject);procedure Button4Click(Sender: TObject);procedure Button5Click(Sender: TObject);procedure Button6Click(Sender: TObject);procedure Button7Click(Sender: TObject);private { Private declarations }public { Public declarations }end;
var Form1: TForm1;implementation{$R *.dfm}varF: Text; //TextFile 和 Text 是一样的FileName: string = 'c:\temp\test.txt';//写文件procedure TForm1.Button1Click(Sender: TObject);beginAssignFile(F,FileName);Rewrite(F); //会覆盖已存在的文件Writeln(F, '第一行');Writeln(F, '第二行');CloseFile(F);end;//读文件(先执行写文件)procedure TForm1.Button2Click(Sender: TObject);vars: string;beginAssignFile(F,FileName);Reset(F); //只读打开Readln(F, s); //读取ShowMessage(s); //显示: 第一行Readln(F, s); //继续读取ShowMessage(s); //显示: 第二行CloseFile(F);end;//追加procedure TForm1.Button3Click(Sender: TObject);beginAssignFile(F,FileName);Append(F); //打开准备追加Writeln(F, '第三行');Writeln(F, '第四行');CloseFile(F);end;//读取全部(需要Memo帮忙显示)procedure TForm1.Button4Click(Sender: TObject);vars: string;beginAssignFile(F,FileName);Reset(F); //只读打开Memo1.Clear;while not Eof(F) dobeginReadln(F, s);Memo1.Lines.Add(s);end;CloseFile(F);end;//分列写入procedure TForm1.Button5Click(Sender: TObject); //这个过程级函数的功能是: 用空格把 s 凑够 n 的长度
function AddSpace(s: string; n: Word): string;beginwhile Length(s) < n dobegins := s + ' ';end;Result := s;end;varname: string[8];address: string[16];beginAssignFile(F, FileName);Rewrite(F);name := '张三';name := AddSpace(name,8);address := '浙江金华';address := AddSpace(address,16);Writeln(F, name, address);name := '李四儿';name := AddSpace(name,8);address := '浙江金华';address := AddSpace(address,16);Writeln(F, name, address);name := '321.com 321团购网';name := AddSpace(name,8);address := AddSpace(address,16);Writeln(F, name, address);
CloseFile(F);
{写入的结果是: 张三 山东泰安 李四儿 浙江金华 321.com 321团购网}
end;//分列读取procedure TForm1.Button6Click(Sender: TObject);var name: string[8];address: string[16];beginAssignFile(F, FileName);Reset(F);Memo1.Clear;while not Eof(F) dobeginReadln(F, name);Memo1.Lines.Add(name);end;CloseFile(F);Reset(F);while not Eof(F) dobeginReadln(F, name, address);Memo1.Lines.Add(address);end;CloseFile(F);
{读取结果: 张三 李四儿 王二麻子 浙江金华 321.com 321团购网 }end;//不同数据类型的写入和读取procedure TForm1.Button7Click(Sender: TObject);var name: string[6];age: Word;birthday: TDate;beginAssignFile(F,FileName);Rewrite(F);name := '菜花 '; //加两个空格凑够6个字符age := 18;birthday := StrToDate(DateToStr(Now-18*365)); //假如她今天过生日Writeln(F,name,age,birthday);CloseFile(F);Reset(F);Readln(F,name,age,birthday);Memo1.Clear;Memo1.Lines.Add(name);Memo1.Lines.Add(IntToStr(age));Memo1.Lines.Add(DateToStr(birthday));CloseFile(F);
{读取结果: 菜花 18 1989-12-23}
//其实这样的东西应该用类型文件操作更合适, 但如果有这样的文本文件让你读取呢?
end;
end;
相关阅读 >>
关于公历与农历换算和时间处理的单元 calendar.pas
Delphi 实现类似windows的查找功能-遍历整个硬盘目录
更多相关阅读请进入《Delphi》频道 >>