Delphi 10.3 Rio 中处理 CSV  
官方Delphi 学习QQ群: 682628230(三千人)
频道

Delphi 10.3 Rio 中处理 CSV


读取 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