Files
fl_chart/example/lib/util/csv_parser.dart
zypherift c7e3f36b06
Some checks failed
Code Coverage / upload (push) Has been cancelled
Gh-Pages / build (push) Has been cancelled
Code Verification / verify (push) Has been cancelled
1.0.0
2025-08-09 18:17:34 +02:00

46 lines
1.1 KiB
Dart

class CsvParser {
static List<List<String>> parse(String rawCsvData) {
final lines =
rawCsvData.split('\n').where((line) => line.isNotEmpty).toList();
final headers = _parseCsvLine(lines.first);
return [
headers,
...lines.skip(1).map((line) => _parseCsvLine(line)),
];
}
static List<String> _parseCsvLine(String line) {
final values = <String>[];
final buffer = StringBuffer();
bool insideQuotes = false;
for (int i = 0; i < line.length; i++) {
final char = line[i];
if (char == '"') {
if (insideQuotes && i + 1 < line.length && line[i + 1] == '"') {
// Handle escaped quotes
buffer.write('"');
i++; // Skip the next quote
} else {
// Toggle the insideQuotes flag
insideQuotes = !insideQuotes;
}
} else if (char == ',' && !insideQuotes) {
// End of value
values.add(buffer.toString());
buffer.clear();
} else {
// Normal character
buffer.write(char);
}
}
// Add the last value
values.add(buffer.toString());
return values;
}
}