Difference between revisions of "CSV"

From Lazarus wiki
Jump to navigationJump to search
(Overview of CSV, contrast with SDF)
 
m
Line 8: Line 8:
  
 
== Implementations ==
 
== Implementations ==
=== DelimitedText ==
+
=== DelimitedText ===
 
TStringList offers the DelimitedText property. This parses a line of text out into separate fields. Note, however, that DelimitedText is supposed to be in SDF, a Delphi-specific format that is very much like CSV, but does not conform with RFC4180 completely.
 
TStringList offers the DelimitedText property. This parses a line of text out into separate fields. Note, however, that DelimitedText is supposed to be in SDF, a Delphi-specific format that is very much like CSV, but does not conform with RFC4180 completely.
  

Revision as of 11:39, 14 June 2012

Overview

CSV means Comma-Separated Values, and is a popular file format that is unfortunately not completely standardized. It is a text based file format with data fields separated by comma's (or, in variants, other characters like tabs and semicolons). There may or not be a header line that lists the field names. Field data containing delimiters may be prohibited or enclosed by quotes (most commoonly the double quote character). Line endings (#13 and/or #10) may or may not be allowed in field data.

RFC4180 (see [www.rfc-editor.org/rfc/rfc4180.txt]) tries to codify and standardize existing practice; it makes sense to conform to this standard when writing CSV data (and accept all RFC4180 data when reading). Another, different, specification can be found at [1]

Spreadsheet packages such as Microsoft Excel and OpenOffice/LibreOFfice Calc are able to export to and import from this format. However, as Microsoft Excel may interpret some fields such as date fields differently depending on a user's OS locale, it may pay to find alternative ways of transferring data (e.g. using the FPSpreadsheet code).

Implementations

DelimitedText

TStringList offers the DelimitedText property. This parses a line of text out into separate fields. Note, however, that DelimitedText is supposed to be in SDF, a Delphi-specific format that is very much like CSV, but does not conform with RFC4180 completely.

Tips: when reading CSV data, set the StrictDelimiter property to true. When writing out CSV data, set StrictDelimiter to false and output the DelimitedText property.

(See e.g. [2] for a pending patch that improves SDF input/output).

SDFDataset

FreePascal offers the SDFDataset, which stores data in SDF format. This format may be close enough to what a reading application expects to function.

Data Export

FreePascal/Lazarus database export functionality (e.g. TCSVExporter on the Data Export tab) offers CSV export functionality for datasets.

CsvDocument

See CsvDocument.

Jan's CSV components

See JCSV_(Jans_CSV_Components).

ZMSQL

ZMSQL stores data in semicolon-delimited files (using SDF?).