私が今やっていることは、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);