SQuirreL結果からCSV /スプレッドシートをきれいに印刷する方法は?

SQuirreL結果からCSV /スプレッドシートをきれいに印刷する方法は?

私が今やっていることは、SQuirreLからSQLクエリの結果を取得し、さまざまなフォームやレポートにASCIIテキストとして貼り付けたいと思います。 SQuirreLを使用すると、結果をExcelまたはCSVにエクスポートできますが、結果の形式を次のように指定したいと思います。

+---------+--------+-------+
|  header | header | header|
+---------+--------+-------+
|  value  | value  | value |
+---------+--------+-------+

以前にこのようなことが起こらなかった場合は驚きます。しかし、これについて検索した結果、何も出ませんでした。

修正する:

見たので参考にしてくださいhttps://stackoverflow.com/questions/10518207/tool-to-convert-csv-data-to-stackoverflow-friend-text-only-tableしかし、これはウェブサイトのソリューションです。私はコマンドラインで実行できることを望みます。

答え1

私は最終的にPerlで書かれた3つの可能な解決策を研究しました。

どちらもCSVを読み取るための基礎としてText :: CSVを使用します。

テーブルパッケージを準備する前に、手動でやろうとしました。シンプルだが少し退屈です。最大フィールド長を手動で決定し、必要なセクションを描画する必要があります。それにもかかわらず、これを実行する適切な間隔のPerlスクリプトは78行しか使用しません。

それからPerl Text :: Tableパッケージを見ました。http://search.cpan.org/~shlomif/Text-Table-1.131/lib/Text/Table.pm。一見すると、これは私に必要なようです。しかし、私は文書を本当に理解していなかったし、例が役に立たなかったことを知りました。私はこれをあきらめた。

その後、次の場所にあるText::ASCIITableを見つけました。http://search.cpan.org/~lunatic/Text-ASCIITable-0.20/lib/Text/ASCIITable.pm。私が何をすべきかを示す例は十分で、必要なスクリプトを簡単に書くことができました。私が持っている唯一の問題は、「print $ table」はうまく機能しますが、「draw()」メソッドはうまくいかないようです(何もしません)。最終的な解決策の長さは31行にすぎません。

完全なスクリプトは次のとおりです。

#! /bin/perl
use strict;
use Text::CSV;
use Text::ASCIITable;

my $csv = Text::CSV->new();
my $filename = shift @ARGV;
my $fh;
if (defined $filename) {
    open $fh, "<$filename";
}
else {
    $fh = *STDIN;
}

my $asciitable  = Text::ASCIITable->new();
$asciitable->setOptions('reportErrors', 1);

my $firstRow = $csv->getline($fh);
my @firstRowFields = @$firstRow;
my $numColumns = $#firstRowFields + 1;

$asciitable->setCols(@firstRowFields);

while (my $row = $csv->getline($fh)) {
    $asciitable->addRow($row);
}

print $asciitable;

exit(0);

関連情報