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 
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).
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.  for a pending patch that improves SDF input/output).
FreePascal offers the SDFDataset, which stores data in SDF format. This format may be close enough to what a reading application expects to function.
FreePascal/Lazarus database export functionality (e.g. TCSVExporter on the Data Export tab) offers CSV export functionality for datasets.
Jan's CSV components
ZMSQL stores data in semicolon-delimited files (using SDF?).