Я пытаюсь прочитать данные из файла CSV с помощью Dart. Код, который я использую, считывает строки из файла и разбивает их на столбцы с помощью метода split(). Один из столбцов содержит числовые данные в строковом формате, которые мне нужно преобразовать в двойные. Однако, когда я пытаюсь разобрать строку с помощью метода double.parse(), я получаю FormatException: Invalid double error. (строка "1.5", которая должна работать нормально)
map[columns[5]] = (map[columns[5]] ?? 0) + double.parse(columns[3]);
это ошибка отображается:
Reading from file: .\\test.csv
Unhandled exception:
FormatException: Invalid double
"1.5"
#0 double.parse (dart:core-patch/double_patch.dart:112:28)
#1 main (...)
#2 _delayEntrypointInvocation.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:295:33)
#3 _RawReceivePort._handleMessage (dart:isolate-patch/isolate_patch.dart:192:26)
Я попытался использовать метод trim() для удаления любых пробельных символов из строки перед ее синтаксическим анализом, но ошибка сохраняется. Я также проверил данные в файле CSV и подтвердил, что они правильно отформатированы как десятичное число.
Вы будете следовать таким образом
void main() {
var value1 = "1.5";
var value2 = double.parse(value1);
print(value1);
print(value2);
var value3 = value2 + double.parse(value1);
print(value3);
}
Отвечать
Сообщение об ошибке:
FormatException: Invalid double "1.5"
указывает, что вы вызываете double.parse
строку "1.5"
, содержащую символы двойных кавычек. Вы должны снять их в первую очередь. Это можно сделать разными способами, например:
String unquote(String s) =>
(s.length < 2 || !s.startsWith('"') || !s.endsWith('"'))
? s
: s.substring(1, s.length - 1);
void main() {
var s = '"1.5"';
print(s); // Prints: "1.5"
print(unquote(s)); // Prints: 1.5
print(double.parse(unquote(s))); // Prints: 1.5
}
Или еще лучше было бы использовать правильный парсер CSV, который должен обрабатывать поля без кавычек для вас. Обратите внимание, что наивное использование String.split
может привести к неверным результатам, если ваш CSV-файл содержит строки со встроенными запятыми. (Лично я им не пользовался, но package:csv наверное подойдёт.)