How to Parse CSV Files
Correctly parse CSV files, handling quoted fields, embedded commas, and multiline values.
Problem
Your CSV parser breaks on fields that contain commas, quotes, or newlines inside quoted values.
Prerequisites
- Understanding of CSV format
- Knowledge of RFC 4180 quoting rules
Steps
-
1. Understand RFC 4180 rules
Fields containing commas, double quotes, or newlines must be enclosed in double quotes. Quotes inside quoted fields are escaped by doubling them (""). A proper parser follows these rules rather than simply splitting on commas.
Input"Smith, John",30Outputone field: 'Smith, John' -
2. Use a standards-compliant parser
Use a CSV parser that implements RFC 4180 rather than a naive string split. The parser should handle quoted fields, escaped quotes, and multiline values. Specify the delimiter, quote character, and encoding explicitly.
InputCSV with quoted fieldsOutputcorrectly parsed rows -
3. Handle edge cases
Account for BOM at the start of the file, different line endings (CRLF vs LF), empty fields, and trailing delimiters. Decide on a policy for rows with inconsistent field counts. These edge cases are common in real-world CSV files.
InputBOM + CRLF + empty fieldsOutputhandled gracefully
Expected result
Correctly parsed CSV data where quoted fields, embedded delimiters, and multiline values are handled properly.
Common errors
- Naive split on comma breaks quoted fields
- Never use a simple string.split(','). Use a proper CSV parser that respects quoting rules.
- BOM appears as a hidden character in the first field
- Detect and strip the UTF-8 BOM (EF BB BF) before parsing, or use a parser that handles it automatically.
Troubleshooting
- If rows are misaligned, check for unquoted fields containing commas or inconsistent line endings.
- For very large files, use a streaming CSV parser to process rows one at a time.
Security limits
- CSV injection: cells starting with =, +, -, or @ can execute formulas in spreadsheet apps. Sanitize if output will be opened in Excel.
Related tools
Related glossary
Related tasks
Ready to run it?