delphi读写文本文件2010/04/27 13:17在
工作中遇到了这样一个
问题,使用PLSQL将一个表的数据转化成一些列的insert语句存储到一个.sql文本中,我本来想使用access数据库中的查询视图一次执行这些语句,可是
查询视图只能一次执行一条insert语句,如果手工执行将是一件很痛苦的事情。于是就自己想编写一个程序,让
程序逐条读取insert语句,然后再执行语句。
在
网络上搜集了一些资料然后自己编写了一个逐行读取txt文本文件的程序,在这里和大家共享。
procedure TForm1.Button1Click(Sender: TObject);
var
fi:TextFile; //system单元中有textfile数据类型的定义
a1:string;
i:integer;
strsql:string;
begin
i:=1;
strsql:='';
AssignFile(fi,'e:\22.txt');
Reset(fi);
while not Eof(fi) do
begin
Readln(fi,a1);
str
sql:=strsql+a1;
if (i mod 2=0) then
begin
//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;
interface
uses 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}
var
F: Text; //TextFile 和 Text 是一样的
FileName: string = 'c:\te
mp\test.txt';
//写文件
procedure TForm1.Button1Click(Sender: TObject);
begin
AssignFile(F,FileName);
Rewrite(F); //会覆盖已存在的文件
Writeln(F, '第一行');
Writeln(F, '第二行');
CloseFile(F);
end;
//读文件(先执行写文件)
procedure TForm1.Button2Click(Sender: TObject);
var
s: string;
begin
AssignFile(F,FileName);
Reset(F); //只读打开
Readln(F, s); //读取
ShowMessage(s); //显示: 第一行
Readln(F, s); //继续读取
ShowMessage(s); //显示: 第二行
CloseFile(F);
end;
//追加
procedure TForm1.Button3Click(Sender: TObject);
begin
AssignFile(F,FileName);
Append(F); //打开准备追加
Writeln(F, '第三行');
Writeln(F, '第四行');
CloseFile(F);
end;
//读取全部(需要Memo帮忙显示)
procedure TForm1.Button4Click(Sender: TO