读取 CSV 文件
我没有合适的 CSV 文件,所以我转换了 Delphi 示例数据库来创建一个 CSV。
第一行是标题。
"NAME","SIZE","WEIGHT","AREA"
"Angel Fish",2,2,"Computer Aquariums"
"Boa",10,8,"South America"
"Critters",30,20,"Screen Savers"
"House Cat",10,5,"New Orleans"
"Ocelot",40,35,"Africa and Asia"
"Parrot",5,5,"South America"
"Tetras",2,2,"Fish Bowls"
program ReadCSV;
{$APPTYPE CONSOLE}
{$R *.res}
uses
System.Classes, System.SysUtils;
begin
var Reader := TStreamReader.Create('animals.csv', TEncoding.Default, True);
try
Reader.ReadLine;
while not Reader.EndOfStream do
begin
for var Field in Reader.ReadLine.Split([','], '"') do
Writeln(Field.DeQuotedString('"'));
Writeln;
end;
finally
Reader.Free;
end;
Readln;
end.
执行结果:
Angel Fish
2
2
Computer Aquariums
Boa
10
8
South America
Critters
30
20
Screen Savers
House Cat
10
5
New Orleans
Ocelot
40
35
Africa and Asia
Parrot
5
5
South America
Tetras
2
2
Fish Bowls
使用 TStringList 进行文本分割的版本如下。
program ReadCSV;
{$APPTYPE CONSOLE}
{$R *.res}
uses
System.Classes, System.SysUtils;
begin
var Reader := TStreamReader.Create('animals.csv', TEncoding.Default, True);
var Fields := TStringList.Create;
try
Fields.StrictDelimiter := True; 字 (TStringList.QuoteChar) は考慮される。
Reader.ReadLine;
while not Reader.EndOfStream do
begin
Fields.DelimitedText := Reader.ReadLine;
for var Field in Fields do
Writeln(Field);
Writeln;
end;
finally
Fields.Free;
Reader.Free;
end;
Readln;
end.
program ReadCSV; {$APPTYPE CONSOLE} uses SysUtils, Classes, uStreamReaderWriter; var Reader: TStreamReader; Fields: TStringList; Field: String; begin Reader := TStreamReader.Create('animals.csv'); Fields := TStringList.Create; try Fields.StrictDelimiter := True; Reader.ReadLine; while not Reader.EndOfStream do begin Fields.DelimitedText := Reader.ReadLine; for Field in Fields do Writeln(Field); Writeln; end; finally Fields.Free; Reader.Free; end; Readln; end. |
导出 CSV 文件
说实话,写它的人并不是很特别。
写入CSV.dpr
program WriteCSV;
{$APPTYPE CONSOLE}
{$R *.res}
uses
System.Classes, System.SysUtils, System.Types;
begin
var Writer := TStreamWriter.Create('animals2.csv', False, TEncoding.UTF8);
try
var StrArr: TStringDynArray;
SetLength(StrArr, 4);
StrArr[0] := 'NAME'.QuotedString('"');
StrArr[1] := 'SIZE'.QuotedString('"');
StrArr[2] := 'WEIGHT'.QuotedString('"');
StrArr[3] := 'AREA'.QuotedString('"');
Writer.WriteLine(String.Join(',', StrArr));
StrArr[0] := 'Angel Fish'.QuotedString('"');
StrArr[1] := '2';
StrArr[2] := '2';
StrArr[3] := 'Computer Aquarium'.QuotedString('"');
Writer.WriteLine(String.Join(',', StrArr));
finally
Writer.Free;
end;
end.
Copyright © 2014 DelphiW.com 开发 源码 文档 技巧 All Rights Reserved
晋ICP备14006235号-8 晋公网安备 14108102000087号
执行时间: 0.036754131317139 seconds