Как добавить символы в строку в файле? - PullRequest
1 голос
/ 03 июня 2009

У меня есть CSV-файл, который был извлечен из системы тикетов (у меня нет прямого доступа к БД), и мне нужно добавить к нему пару столбцов из другой базы данных, прежде чем создавать из него отчеты в Excel.

Я использую Perl для извлечения данных из другой базы данных и хотел бы просто добавить дополнительные столбцы в конец каждой строки при обработке файла.

Есть ли способ сделать это без необходимости создавать новый файл? Основная структура:

foreach $line (@lines) {
    my ($vars here....) = split (',',$line);
    ## get additional fields
    ## append new column data to line
}

Ответы [ 4 ]

7 голосов
/ 03 июня 2009

Вы можете посмотреть на DBD :: CSV , чтобы обработать файл как базу данных (которая также будет обрабатывать экранирование специальных символов для вас).

3 голосов
/ 03 июня 2009

Вы можете использовать Tie :: File (в ядре Perl начиная с Perl 5.8), чтобы изменить файл на месте:

#!/usr/bin/perl

use strict;
use warnings;

use Tie::File;


my $file = shift;

tie my @lines, "Tie::File", $file
    or die "could not open $file: $!\n";

for my $line (@lines) {
    $line .= join ",", '', get_data();
}

sub get_data {
    my $data = <DATA>;
    chomp $data;
    return split /-/, $data
}

__DATA__
1-2-3-4
5-6-7-8

Вы также можете использовать редактирование на месте с трюком @ARGV / <>, установив $ ^ I:

#!/usr/bin/perl

use strict;
use warnings;

$^I = ".bak";

while (my $line = <>) {
    chomp $line;
    $line .= join ",", '', get_data();
    print "$line\n";
}

sub get_data {
    my $data = <DATA>;
    chomp $data;
    return split /-/, $data
}

__DATA__
1-2-3-4
5-6-7-8
1 голос
/ 03 июня 2009

Несмотря на любые приятные интерфейсы, вы должны в конечном итоге читать файл построчно. Возможно, вам даже придется сделать больше, если некоторые поля в кавычках могут иметь встроенные символы новой строки. Используйте то, что знает о CSV, чтобы избежать некоторых из этих проблем. Text :: CSV_XS должен избавить вас от большинства неприятных случаев.

0 голосов
/ 03 июня 2009

Рекомендуется использовать опцию -i для редактирования <> файлов на месте.

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