利用ADO访问csv文件可以利用Schema.ini来订制格式,数据类型, Schema.ini 必须与csv在同一个目录才生效
test1.csv 内容
a,b,c
qqq,qqq,qq
22,22,22
2,2,2
2,4,2
qqq,qqq,qq
qqq,qqq,qq
Schema.ini 内容
[test1.csv]
Format=Delimited(,)
ColNameHeader=True
MaxScanRows=0
CharacterSet=ANSI
a=F1 Char Width 3
b=F2 Char Width 10
c=F3 Integer
[test2.csv]
Format=Delimited(,)
ColNameHeader=False
MaxScanRows=0
CharacterSet=ANSI
Col1=F1 Char Width 5
Col2=F2 Char Width 5
Col3=F3 Char Width 5
Col4=F4 Char Width 5
Col5=F5 Char Width 5
Col6=F6 Char Width 5
delphi source
procedure TForm1.Button1Click(Sender: TObject);
var
t:Cardinal;
begin
t:
=
GetTickCount();
ADOConnection1.Close;
ADOConnection1.ConnectionString :
=
'
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Temp\;Persist Security Info=False;Extended Properties="Text;HDR=Yes;FMT=Delimited(,)"'; // HDR表示首行字段列表,Delimited(,)表示是以逗号分割的文件
ADOQuery1.Close;
ADOQuery1.SQL.Text :
=
'
select * from [Test1.csv]';
ADOQuery1.Open;
t:
=
GetTickCount()
-
t;
memo1.Lines.Add(inttoStr(t));
end
;
procedure TForm1.Button2Click(Sender: TObject);
var
t:Cardinal;
begin
t:
=
GetTickCount();
ADOConnection1.Close;
ADOConnection1.ConnectionString :
=
'
Provider=MSDASQL;Driver={Microsoft Text Driver (*.txt; *.csv)};DBQ=C:\Temp';
ADOQuery1.Close;
ADOQuery1.SQL.Text :
=
'
select * from Test1.csv';
ADOQuery1.Open;
t:
=
GetTickCount()
-
t;
memo1.Lines.Add(inttoStr(t));
end
;
这个这两种读取方式.数据量小,第一种快点.数据量大第二种快. 如果没有Schema.ini 你会发现读取出来的数据有些是空的.是字段类型的缘故.