Как добавить столбцы в CSV-файл с Perl? - PullRequest
0 голосов
/ 11 октября 2019

У меня есть CSV-файл содержит следующие данные. Теперь я хочу добавить несколько дополнительных столбцов в конце. В этих дополнительных столбцах они имеют разное значение, но содержание каждой строки одинаково. Как мы можем сделать это с Perl?

Original csv file
Item Price Number
A     11    2
B     10    3
C     20    1
...(many lines)
...

Я хочу добавить розничный продавец и покупатель информация в конце

Output csv file

Item Price Number Retailer Buyer
A     11      2      Mike    Tom
B     21      1      Mike    Tom
C     30      4      Mike    Tom
...(many lines)
...

Каждый столбец имеет только 1 значение, но онораспространяется на последний ряд файла CSV. (Заголовок и значение столбца могут быть жесткими, это не главное)

Ответы [ 2 ]

1 голос
/ 14 октября 2019

Это файлы CSV? Я не вижу запятых в ваших данных. Возможно, вместо этого они разделены табуляцией.

В любом случае вам не нужен Text :: CSV для этого, поскольку вы просто добавляете данные в каждую строку.

#!/usr/bin/perl

use strict;
use warnings;
use feature 'say';

while (<>) {
  chomp;
  if ($. == 1) { # first line
    say "$_\tRetailer\tBuyer";
  } else {
    say "$_\tMike\tTom";
  }
}

(Если у вас действительно есть CSV-файлы, замените «\ t» в моем коде на «,»)

Это читает из STDIN и записывает в STDOUT, поэтому (при условии, что это файл append_cols) вы бы назвали это так:

./append_cols < your_old_file.csv > some_new_file.csv
1 голос
/ 11 октября 2019

Использовать Текст :: CSV .

use strict;
use warnings;
use Text::CSV 'csv';

my $rows = csv(in => *STDIN, encoding => 'UTF-8', auto_diag => 2,
  sep_char => "\t", keep_headers => \my @headers);

push @headers, 'Retailer', 'Buyer';
foreach my $row (@$rows) {
  $row->{Retailer} = 'Mike';
  $row->{Buyer} = 'Tom';
}

csv(in => $rows, out => *STDOUT, encoding => 'UTF-8', auto_diag => 2,
  sep_char => "\t", headers => \@headers);

Предполагая, что ваш CSV-файл фактически разделен одной вкладкой, получая входные данные в STDIN и печатая в STDOUT.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...