Преобразование строки в формат float в Perl

#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. Повторите » Это очень просто установить «, … и используйте!