Csv

如何從 SQuirreL 結果中漂亮地列印 CSV/電子表格?

  • September 20, 2016

我希望能夠從 SQuirreL 獲取 SQL 查詢結果並將它們作為 ascii 文本粘貼到各種表單和報告中。使用 SQuirreL,我可以將結果導出為 Excel 或 CSV,但我希望最終將結果格式化為這種格式;

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

如果以前沒有這樣做過,我會感到驚訝,但是我對此的搜尋是空的。

更新

請注意,我看到了https://stackoverflow.com/questions/10518207/tool-to-convert-csv-data-to-stackoverflow-friendly-text-only-table,但這些都是網站解決方案。我想要一些可以在命令行上執行的東西。

我最終研究了三種可能的解決方案,都在 Perl 中。

這三個都使用 Text::CSV 作為基礎,以讀取 CSV。

在我確定一個準備好的 Table 包之前,我只是嘗試手動完成它。這很簡單,但有點乏味。我必須手動確定最大欄位長度並繪製所需的部分。即便如此,一個間隔良好的 Perl 腳本只用了 78 行。

然後我查看了位於http://search.cpan.org/~shlomif/Text-Table-1.131/lib/Text/Table.pm的 Perl Text::Table 包。從一個非常快速的角度來看,這看起來就像我所需要的。但是,我發現我真的不了解文件,並且範例沒有幫助。我放棄了這個。

然後我在http://search.cpan.org/~lunatic/Text-ASCIITable-0.20/lib/Text/ASCIITable.pm發現了 Text::ASCIITable 。有足夠多的範例顯示我需要做什麼,以便輕鬆建構我需要的腳本。我遇到的唯一問題是“draw()”方法似乎不起作用(什麼也沒做),儘管“print $table”工作正常。得到的解決方案只有 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);

引用自:https://unix.stackexchange.com/questions/310900