2012-12-08 4 views
1

Я пишу небольшой скрипт в perl для моего клиента, который будет извлекать определенные данные из базы данных и отправляет электронное письмо с этими данными клиенту через вложение. Сам скрипт не является проблемой, проблема в файле. Я думал, что стандартный .csv-файл будет в порядке, и скрипт делает то, что он должен делать с ним, без каких-либо проблем, но клиенты, которые продолжают обрабатывать данные, нуждаются в файле .tsv без каких-либо разделителей, таких как двойные кавычки. Проблема в том, что данные базы данных содержат специальные символы, которые им нужны, например текст с новыми строками и двойные кавычки. После запуска скрипта он создает .tsv, но специальные символы испортили его, поэтому им нужно как-то избежать, к сожалению, я не могу использовать двойные кавычки для этого, например, в CSV-файле. Есть ли лучшее решение для этого?Перенос данных базы данных perl, csv, tsv

Спасибо.

ответ

1

Использование Text::CSV настроен на использование вкладок в качестве разделителей:

#!/usr/bin/env perl 
use strict; 
use warnings qw(all); 
use Text::CSV; 

my $tsv = Text::CSV->new({ 
    #quote_char  => undef, 
    #escape_char  => undef, 
    sep_char  => "\t", 
    eol    => "\n", 
    quote_space  => 0, 
    quote_null  => 0, 
}); 

my @line = ("column1\t", 12345, scalar localtime); 
$tsv->print(\*STDOUT, \@line); 
+0

спасибо за ответ, я последний раз пробовал Text :: CSV_XS не работает правильно, но Больная попытка Text :: CSV будет видеть, что происходит – Lukas

+0

@Lukas это вообще не сработало или это дало результаты, отличные от ожидаемых? Существует несколько способов экранирования символов для вывода TSV/CSV. В какую базу данных вы импортируете данные? – creaktive

+0

это сработало, но результаты не были правильными в каждой текстовой ячейке, содержащей новую строку \ n перепутанных строк ниже. Согласно клиенту его доступ к Microsoft, но насколько я знаю, они также должны принимать файлы csv, так или иначе, им нужно получить tsv:/thats, почему проблема – Lukas

Смежные вопросы