#string #csv #perl #floating-point
#строка #csv #perl #с плавающей запятой
Вопрос:
Я новичок в Perl. Я читаю файл CSV с использованием Perl. Первый столбец CSV — это time (который является значением с плавающей запятой). Я прочитал CSV и успешно отобразил содержимое CSV. Кроме того, я хочу использовать данные CSV для некоторых вычислений. Мне нужен столбец time в виде массива (или любой структуры данных). При чтении столбца time и сохранении его в массиве он сохраняется как строка. Я хочу иметь числовой массив для арифметических вычислений.
Я пытался добавить 0, mul 1, а затем сохранить его в массиве, используя sprintf, но я сталкиваюсь с ошибками.
use v5.30.0;
use strict;
use warnings;
my $file = $ARGV[0] or die;
open(my $data, '<',$file) or die;
my @timeArray;
while(my $line = <$data>){
chomp $line;
my @words = split ",",$line;
#my $temp=$words[1]*1;
my $temp=sprintf "%.6f",$words[1];
push @timeArray,$temp;
}
Ошибка:
Argument ""67.891947295"" isn't numeric in multiplication (*) at 3.pl line 12, <$data> line 19556.
and
Argument ""67.840034174"" isn't numeric in sprintf at 3.pl line 13, <$data> line 19555.
Кроме того, почему аргумент в «» «» .
Комментарии:
1. Вы не показываете свой CSV-файл, но похоже, что это поле заключено в кавычки, и вы не удаляете кавычки. Используйте
Text::CSV_XS
, если вы хотите прочитать нетривиальные данные CSV, а неsplit
.2. Не могли бы вы, пожалуйста, написать блок для чтения CSV с использованием Text::CSV_XS, я не могу найти хороших ресурсов.
3. В документации есть примеры…
4. Проблема не в преобразовании строки в число, проблема в том, что строка, которую вы имеете, не является числом, потому что вы неправильно проанализировали CSV.
Ответ №1:
Неплохо обрабатывать подобные данные с помощью соответствующего модуля, потому что есть несколько важных деталей, о которых вы не позаботились. Примеры:
- Значения столбцов могут быть заключены в кавычки
- Первая строка может содержать имена заголовков каждого столбца
- Последняя запись в файле может иметь или не иметь конечный разрыв строки
- И т.д.
Прочитайте документ RFC-4180 для получения дополнительной информации.
Существует множество модулей, которые могут анализировать формат CSV, например: Текст: CSV. Его очень легко установить, и когда вы его используете, ваша проблема с удвоением строки исчезнет.
Комментарии:
1. Повторите » Это очень просто установить «, … и используйте!