如何從 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-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);