Заменить запятые в CSV-файле - PullRequest
0 голосов
/ 02 июня 2010

Я использую Perl для разбора дампа сырой базы данных в файл CSV. Проблема в том, что он неправильно отформатирован для Excel. Мне нужно добавить заголовок в верхней части файла, а также удалить все запятые. Это может быть сделано в perl one liner, но это часть более крупного сценария perl, поэтому я хочу сделать это в основном сценарии perl. Я пытался что-то вроде этого:

    print "Formatting csv file... $csvFile\n";

    open IN, '<', $csvFile or die;
    my @contents = <IN>;
    close IN;

    @contents =~ s/\'//g;

    open OUT, '>', $csvFile or die;
    print OUT @contents;
    close OUT;

Вы можете сделать это, конечно:

    @contents =~ s/\'//g;

Мне нужно убрать запятые и добавить строку в начало файла. Есть идеи?

Ответы [ 2 ]

0 голосов
/ 02 июня 2010

Вы почти там для части заголовка.

Для первой строки вывода просто распечатайте это в файл перед CSV:

my $header='"field 1","field 2","field n"';

open OUT, '>', $csvFile or die;
print OUT "$header\n";
# print the CSV part...
close OUT;

Для части CSV используйте библиотеку. Здесь очень много. В этом уроке вам сообщат.

0 голосов
/ 02 июня 2010

Проще прочитать файл построчно и вывести его в новый временный файл, а затем переименовать этот файл обратно в исходный:

print "Formatting csv file... $csvFile\n";
my $newfile = '/tmp/newfilename.csv';
open(my $inFileHandle, '<', $csvFile) or die "cannot open $csvFile for reading: $!";
open(my $outFileHandle, '>', $newFile) or die "cannot open $newFile for writing: $!";

print $outFileHandle "The header line you need to add\n";
while (my $line = <$inFileHandle>)
{
    $line =~ s/\'//g;
    print $outFileHandle $line;
}

close $inFileHandle;
close $outFileHandle;
rename $newFile, $csvFile;

... но мне интересно, что вы подразумеваете под "он неправильно отформатирован для Excel" и почему вы чувствуете, что вам нужно удалить все одинарные кавычки.

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