This man is too old to remember everything in his brain. Right now, he needs a place to write down what he has studied.
標籤
4GL
(1)
人才發展
(10)
人物
(3)
太陽能
(4)
心理
(3)
心靈
(10)
文學
(31)
生活常識
(14)
光學
(1)
名句
(10)
即時通訊軟體
(2)
奇狐
(2)
爬蟲
(1)
音樂
(2)
產業
(5)
郭語錄
(3)
無聊
(3)
統計
(4)
新聞
(1)
經濟學
(1)
經營管理
(42)
解析度
(1)
遊戲
(5)
電學
(1)
網管
(10)
廣告
(1)
數學
(1)
機率
(1)
雜趣
(1)
證券
(4)
證券期貨
(1)
ABAP
(15)
AD
(1)
agentflow
(4)
AJAX
(1)
Android
(1)
AnyChart
(1)
Apache
(14)
BASIS
(4)
BDL
(1)
C#
(1)
Church
(1)
CIE
(1)
CO
(38)
Converter
(1)
cron
(1)
CSS
(23)
DMS
(1)
DVD
(1)
Eclipse
(1)
English
(1)
excel
(5)
Exchange
(4)
Failover
(1)
Fedora
(1)
FI
(57)
File Transfer
(1)
Firefox
(3)
FM
(2)
fourjs
(1)
Genero
(1)
gladiatus
(1)
google
(1)
Google Maps API
(2)
grep
(1)
Grub
(1)
HR
(2)
html
(23)
HTS
(8)
IE
(1)
IE 8
(1)
IIS
(1)
IMAP
(3)
Internet Explorer
(1)
java
(4)
JavaScript
(22)
jQuery
(6)
JSON
(1)
K3b
(1)
ldd
(1)
LED
(3)
Linux
(117)
Linux Mint
(4)
Load Balance
(1)
Microsoft
(2)
MIS
(2)
MM
(51)
MSSQL
(1)
MySQL
(27)
Network
(1)
NFS
(1)
Office
(1)
OpenSSL
(1)
Oracle
(126)
Outlook
(3)
PDF
(6)
Perl
(60)
PHP
(33)
PL/SQL
(1)
PL/SQL Developer
(1)
PM
(3)
Postfix
(2)
postfwd
(1)
PostgreSQL
(1)
PP
(50)
python
(5)
QM
(1)
Red Hat
(4)
Reporting Service
(28)
ruby
(11)
SAP
(234)
scp
(1)
SD
(16)
sed
(1)
Selenium
(3)
Selenium-WebDriver
(5)
shell
(5)
SQL
(4)
SQL server
(8)
sqlplus
(1)
SQuirreL SQL Client
(1)
SSH
(2)
SWOT
(3)
Symantec
(2)
T-SQL
(7)
Tera Term
(2)
tip
(1)
tiptop
(24)
Tomcat
(6)
Trouble Shooting
(1)
Tuning
(5)
Ubuntu
(37)
ufw
(1)
utf-8
(1)
VIM
(11)
Virtual Machine
(2)
VirtualBox
(1)
vnc
(3)
Web Service
(2)
wget
(1)
Windows
(19)
Windows
(1)
WM
(6)
Xvfb
(2)
youtube
(1)
yum
(2)
2014年9月30日 星期二
perl 利用 regular expression and pack/unpack 比對 特殊字元▲
use Spreadsheet::ParseExcel;
...
my $parser = Spreadsheet::ParseExcel->new();
...
excel 裡面有一個特殊字元 ▲
經過
perl
$char = unpack("H*","▲");
print $char;
__END__
解析,其16進位為 e296b2
所以用以下code判斷
353 my $tmp = ($sheet->get_cell($i,0))->value();
354 my $tmp2 = unpack("H*",$tmp) if $tmp;
355 $tc_imf09 = "危險品" if ($tmp2 =~ /e296b2/);
...
my $parser = Spreadsheet::ParseExcel->new();
...
excel 裡面有一個特殊字元 ▲
經過
perl
$char = unpack("H*","▲");
print $char;
__END__
解析,其16進位為 e296b2
所以用以下code判斷
353 my $tmp = ($sheet->get_cell($i,0))->value();
354 my $tmp2 = unpack("H*",$tmp) if $tmp;
355 $tc_imf09 = "危險品" if ($tmp2 =~ /e296b2/);
2014年9月18日 星期四
insert Oracle with special characters in Perl
https://community.oracle.com/thread/2203961?tstart=0
use Encode;
...
$working = encode("utf8", "µmol/L");
2014年9月17日 星期三
Perl 讀取 Excel (二)
http://fecbob.pixnet.net/blog/post/38617415-%E5%9C%A8perl%E4%B8%AD%E8%AE%80%E5%AF%ABexcel%E8%A1%A8
讀寫Excel的元件需要另外安裝,指令如下:
perl -MCPAN -e shell -> install Spreadsheet::WriteExcel
perl -MCPAN -e shell -> install Spreadsheet::ParseExcel
Python代碼
#!/usr/bin/perl
use Spreadsheet::WriteExcel; #寫入Excel資料
use Spreadsheet::ParseExcel; #讀取Excel資料
# 讀取資料
# 使用: LoadStringsFromExcel(fileName);
sub LoadStringsFromExcel
{
my $parser = Spreadsheet::ParseExcel->new();
my $workbook = $parser->parse(@_[0]); #打開傳入的檔
my $TotalCount = 0;
if(!defined $workbook) #是否打開成功
{
print "Failed to open @_[0]\n";
die $parser->error(),".\n";
}
$Sheets_Count = $workbook->worksheet_count(); #有多少個Sheet
#依次訪問所有Sheet
for ($index=1;$index<=$Sheets_Count;$index++)
{
my $worksheet = $workbook->worksheet($index-1);
my $result;
if(!defined $worksheet) #讀取Sheet失敗
{
print "Could not get the worksheet \n";
last;
}
else
{
$result = LoadWordingsFromSheet($worksheet);
$TotalCount += $result;
}
}
printf "\nTotal found $TotalCount strings\n";
print "Finished!\n";
}
# 讀取Sheet中字串,由LoadStringsFromExcel呼叫
sub LoadWordingsFromSheet
{
my $sheet = $_[0]; #取得傳入的sheet
if(!defined $sheet)
{
die "Could not get argument!\n";
}
#得到Sheet中的最小行號及最大行號
my ($minRow,$maxRow) = $sheet->row_range();
print "Now, checking ",$sheet->get_name()," \n"; #列印Sheet的名稱
$count = 1;
#依次讀取每行資料中第一列的資料
for($i=$minRow;$i<=$maxRow;$i++)
{
#取到第一列的資料, get_cell(行號,列號)
$str = ($sheet->get_cell($i,0))->value();
$str = trim($str);
print $str,"\n";
$count++;
}
return $count;
}
sub trim { my $s = shift; $s =~ s/^\s+|\s+$//g; return $s };
#寫入Excel
#使用WriteDataToExcel(檔案名)
sub WriteDataToExcel
{
my $workbook = Spreadsheet::WriteExcel->new(@_[0]);#打開Excel檔
if(!defined $workbook) #是否打開成功
{
print "Failed to open @_[0]\n";
die $parser->error(),".\n";
}
my $worksheet = $workbook->add_worksheet(); #新建一個Sheet
if(!defined $sheet)
{
die "Cannot create new sheet!\n";
}
#寫入第一行標題 write(行號,列號,內容)
$worksheet->write(0,0,'ID');
$worksheet->write(0,1,'RULE');
#其它處理
}
使用Perl 讀取 Excel
使用Spreadsheet::ParseExcel
[root@tiptopap ~]# perl -MCPAN -e shell
cpan> get Spreadsheet::ParseExcel
cpan> install Spreadsheet::ParseExcel
cpan> test Spreadsheet::ParseExcel
http://tc.wangchao.net.cn/bbs/detail_1476947.html
Spreadsheet::WriteExcel 和 Spreadsheet::ParseExcel
在 2000 年,Takanori Kawai 和 John McNamara 編寫出了 Spreadsheet::WriteExcel 和 Spreadsheet::ParseExcel 模塊並將它們張貼在 CPAN 上,這兩個模塊使得在任何平台上從 Excel 文件抽取數據成爲可能(盡管不容易)。
正如我們在稍後將看到的,如果您正在使用 Windows,Win32::OLE 仍提供一個更簡單、更可靠的解決方案,並且 Spreadsheet::WriteExcel 模塊建議使用 Win32::OLE 來進行更強大的數據和工作表操縱。Win32::OLE 帶有 ActiveState Perl 工具箱,可以用來通過 OLE 驅動許多其它 Windows 應用程序。請注意,要使用此模塊,您仍需要在機器上安裝和注冊一個 Excel 引擎(通常隨 Excel 本身安裝)。
需要解析 Excel 數據的應用程序數以千計,但是這裏有幾個示例:將 Excel 導出到 CSV、與存儲在共享驅動器上的電子表格交互、將金融數據移至數據庫以便形成報告以及在不提供任何其他格式的情況下分析數據。
要演示這裏給出的示例,必須在您的系統上安裝 Perl 5.6.0。您的系統最好是最近(2000 年或以後)的主流 UNIX 安裝(Linux、Solaris 和 BSD)。雖然這些示例在以前版本的 Perl 和 UNXI 以及其他操作系統中也可以使用,但是您應該考慮到您將面對那些它們無法作爲練習發揮作用的情況。
Windows 示例:解析
本節僅適用于 Windows 機器。所有其它各節適用于 Linux。
在進行之前,請安裝 ActiveState Perl(這裏使用版本 628)或 ActiveState Komodo IDE 以編輯和調試 Perl。Komodo 爲家庭用戶提供一個免費許可證,您大概在幾分鍾之內就可以得到它。(有關下載站點,請參閱本文後面的參考資料。)
使 用 ActiveState PPM 軟件包管理器安裝 Spreadsheet::ParseExcel 和 Spreadsheet::WriteExcel 模塊是困難的。PPM 沒有曆史記錄,難以設置選項,幫助會滾出屏幕並且缺省方式是忽略相關性而安裝。您可以從命令行輸入“ppm”然後發出以下命令來調用 PPM:
清單 1:安裝 Excel 模塊的 PPM 命令
ppm install OLE::Storage_Lite
ppm install Spreadsheet::ParseExcel
ppm install Spreadsheet::WriteExcel
在這種情況下,該模塊的安裝將失敗,因爲 IO::Scalar 還不可用,因此,您可能想放棄 PPM 問題的查找,而轉向內置的 Win32::OLE 模塊。然而,在您閱讀本文時,ActiveState 可能已經發布了該問題的修正。
有了 ActiveState 的 Win32::OLE,您可以使用下面所列的代碼逐個單元地轉儲工作表:
下載 win32excel.pl
清單 2:win32excel.pl
#!/usr/bin/perl -w
use strict;
use Win32::OLE qw(in with);
use Win32::OLE::Const 'Microsoft Excel';
$Win32::OLE::Warn = 3;
# die on errors...
# get already active Excel application or open new
my $Excel = Win32::OLE-GetActiveObject('Excel.Application')
|| Win32::OLE-new('Excel.Application', 'Quit');
# open Excel file
my $Book = $Excel-Workbooks-Open("c:/komodo projects/test.xls");
# You can dynamically obtain the number of worksheets, rows, and columns
# through the Excel OLE interface.
Excel's Visual Basic Editor has more
# information on the Excel OLE interface.
Here we just use the first
# worksheet, rows 1 through 4 and columns 1 through 3.
# select worksheet number 1 (you can also select a worksheet by name)
my $Sheet = $Book-Worksheets(1);
foreach my $row (1..4)
{
foreach my $col (1..3)
{
# skip empty cells
next unless defined $Sheet-Cells($row,$col)-{'Value'};
# print out the contents of a cell
printf "At ($row, $col) the value is %s and the formula is %s\n",
$Sheet-Cells($row,$col)-{'Value'},
$Sheet-Cells($row,$col)-{'Formula'};
}
}
# clean up after ourselves
$Book-Close;
請注意,您可以用以下方式很輕松地爲單元分配值:
$sheet-Cells($row, $col)-{'Value'} = 1;
Linux 示例:解析
本節適用于 UNIX,特別適用于 Linux。沒有在 Windows 中測試它。
很難給出一個比 Spreadsheet::ParseExcel 模塊文檔中所提供的示例更好的 Linux 解析示例,因此我將演示那個示例,然後解釋其工作原理。
下載 parse-excel.pl
清單 3:parse-excel.pl
#!/usr/bin/perl -w
use strict;
use Spreadsheet::ParseExcel;
my $oExcel = new Spreadsheet::ParseExcel;
die "You must provide a filename to $0 to be parsed as an Excel file" unless @ARGV;
my $oBook = $oExcel-Parse($ARGV[0]);
my($iR, $iC, $oWkS, $oWkC);
print "FILE
:", $oBook-{File} , "\n";
print "COUNT :", $oBook-{SheetCount} , "\n";
print "AUTHOR:", $oBook-{Author} , "\n"
if defined $oBook-{Author};
for(my $iSheet=0; $iSheet {SheetCount} ; $iSheet++)
{
$oWkS = $oBook-{Worksheet}[$iSheet];
print "--------- SHEET:", $oWkS-{Name}, "\n";
for(my $iR = $oWkS-{MinRow} ;
defined $oWkS-{MaxRow} && $iR {MaxRow} ;
$iR++)
{
for(my $iC = $oWkS-{MinCol} ;
defined $oWkS-{MaxCol} && $iC {MaxCol} ;
$iC++)
{
$oWkC = $oWkS-{Cells}[$iR][$iC];
print "( $iR , $iC ) =", $oWkC-Value, "\n" if($oWkC);
}
}
}
此示例是用 Excel 97 測試的。如果它不能工作,則試著將它轉換成 Excel 97 格式。Spreadsheet::ParseExcel 的 perldoc 頁也聲稱了 Excel 95 和 2000 兼容性。
電子表格被解析成一個名爲 $oBook 的頂級對象。$oBook 具有輔助程序的特性,例如“File”、“SheetCount”和“Author”。 Spreadsheet::ParseExcel 的 perldoc 頁的工作簿一節中記載了這些特性。
該工作簿包含幾個工作表:通過使用工作簿 SheetCount 特性叠代它們。每個工作表都有一個 MinRow 和 MinCol 以及相應的 MaxRow 和 MaxCol 特性,它們可以用來確定該工作簿可以訪問的範圍。Spreadsheet::ParseExcel perldoc 頁的工作表一節中記載了這些特性。
可以通過 Cell 特性從工作表獲得單元;那就是清單 3 中獲得 $oWkC 對象的方式。Spreadsheet::ParseExcel 的 perldoc 頁的 Cell 一節中記載了 Cell 特性。根據文檔,似乎沒有一種方式能夠獲得特定單元中列出的公式。
Linux 示例:寫入
本節適用于 UNIX,特別適用于 Linux。沒有在 Windows 中測試它。
Spreadsheet::WriteExcel 在 Examples 目錄中帶有許多示例腳本,通常可以在 /usr/lib/perl5/site_perl/5.6.0/Spreadsheet/WriteExcel/examples 下找到這些腳本。它可能被安裝在其它各處;如果找不到那個目錄,請與您的本地 Perl 管理員聯系。
壞消息是 Spreadsheet::WriteExcel 無法用于寫入現有 Excel 文件。必須自己使用 Spreadsheet::ParseExcel 從現有 Excel 文件導入數據。好消息是 Spreadsheet::WriteExcel 與 Excel 5 直至 Excel 2000 兼容。
這裏有一個程序,它演示如何從一個 Excel 文件抽取、修改(所有數字都乘以 2)數據以及將數據寫入新的 Excel 文件。只保留數據,不保留格式和任何特性。公式被丟棄。
下載 excel-x2.pl
清單 4:excel-x2.pl
#!/usr/bin/perl -w
use strict;
use Spreadsheet::ParseExcel;
use Spreadsheet::WriteExcel;
use Data::Dumper;
# cobbled together from examples for the Spreadsheet::ParseExcel and
# Spreadsheet::WriteExcel modules
my $sourcename = shift @ARGV;
my $destname = shift @ARGV or die "invocation: $0 ";
my $source_excel = new Spreadsheet::ParseExcel;
my $source_book = $source_excel-Parse($sourcename)
or die "Could not open source Excel file $sourcename: $!";
my $storage_book;
foreach my $source_sheet_number (0 .. $source_book-{SheetCount}-1)
{
my $source_sheet = $source_book-{Worksheet}[$source_sheet_number];
print "--------- SHEET:", $source_sheet-{Name}, "\n";
# sanity checking on the source file: rows and columns should be sensible
next unless defined $source_sheet-{MaxRow};
next unless $source_sheet-{MinRow}
(王朝網路 wangchao.net.cn)
[root@tiptopap ~]# perl -MCPAN -e shell
cpan> get Spreadsheet::ParseExcel
cpan> install Spreadsheet::ParseExcel
cpan> test Spreadsheet::ParseExcel
http://tc.wangchao.net.cn/bbs/detail_1476947.html
Spreadsheet::WriteExcel 和 Spreadsheet::ParseExcel
在 2000 年,Takanori Kawai 和 John McNamara 編寫出了 Spreadsheet::WriteExcel 和 Spreadsheet::ParseExcel 模塊並將它們張貼在 CPAN 上,這兩個模塊使得在任何平台上從 Excel 文件抽取數據成爲可能(盡管不容易)。
正如我們在稍後將看到的,如果您正在使用 Windows,Win32::OLE 仍提供一個更簡單、更可靠的解決方案,並且 Spreadsheet::WriteExcel 模塊建議使用 Win32::OLE 來進行更強大的數據和工作表操縱。Win32::OLE 帶有 ActiveState Perl 工具箱,可以用來通過 OLE 驅動許多其它 Windows 應用程序。請注意,要使用此模塊,您仍需要在機器上安裝和注冊一個 Excel 引擎(通常隨 Excel 本身安裝)。
需要解析 Excel 數據的應用程序數以千計,但是這裏有幾個示例:將 Excel 導出到 CSV、與存儲在共享驅動器上的電子表格交互、將金融數據移至數據庫以便形成報告以及在不提供任何其他格式的情況下分析數據。
要演示這裏給出的示例,必須在您的系統上安裝 Perl 5.6.0。您的系統最好是最近(2000 年或以後)的主流 UNIX 安裝(Linux、Solaris 和 BSD)。雖然這些示例在以前版本的 Perl 和 UNXI 以及其他操作系統中也可以使用,但是您應該考慮到您將面對那些它們無法作爲練習發揮作用的情況。
Windows 示例:解析
本節僅適用于 Windows 機器。所有其它各節適用于 Linux。
在進行之前,請安裝 ActiveState Perl(這裏使用版本 628)或 ActiveState Komodo IDE 以編輯和調試 Perl。Komodo 爲家庭用戶提供一個免費許可證,您大概在幾分鍾之內就可以得到它。(有關下載站點,請參閱本文後面的參考資料。)
使 用 ActiveState PPM 軟件包管理器安裝 Spreadsheet::ParseExcel 和 Spreadsheet::WriteExcel 模塊是困難的。PPM 沒有曆史記錄,難以設置選項,幫助會滾出屏幕並且缺省方式是忽略相關性而安裝。您可以從命令行輸入“ppm”然後發出以下命令來調用 PPM:
清單 1:安裝 Excel 模塊的 PPM 命令
ppm install OLE::Storage_Lite
ppm install Spreadsheet::ParseExcel
ppm install Spreadsheet::WriteExcel
在這種情況下,該模塊的安裝將失敗,因爲 IO::Scalar 還不可用,因此,您可能想放棄 PPM 問題的查找,而轉向內置的 Win32::OLE 模塊。然而,在您閱讀本文時,ActiveState 可能已經發布了該問題的修正。
有了 ActiveState 的 Win32::OLE,您可以使用下面所列的代碼逐個單元地轉儲工作表:
下載 win32excel.pl
清單 2:win32excel.pl
#!/usr/bin/perl -w
use strict;
use Win32::OLE qw(in with);
use Win32::OLE::Const 'Microsoft Excel';
$Win32::OLE::Warn = 3;
# die on errors...
# get already active Excel application or open new
my $Excel = Win32::OLE-GetActiveObject('Excel.Application')
|| Win32::OLE-new('Excel.Application', 'Quit');
# open Excel file
my $Book = $Excel-Workbooks-Open("c:/komodo projects/test.xls");
# You can dynamically obtain the number of worksheets, rows, and columns
# through the Excel OLE interface.
Excel's Visual Basic Editor has more
# information on the Excel OLE interface.
Here we just use the first
# worksheet, rows 1 through 4 and columns 1 through 3.
# select worksheet number 1 (you can also select a worksheet by name)
my $Sheet = $Book-Worksheets(1);
foreach my $row (1..4)
{
foreach my $col (1..3)
{
# skip empty cells
next unless defined $Sheet-Cells($row,$col)-{'Value'};
# print out the contents of a cell
printf "At ($row, $col) the value is %s and the formula is %s\n",
$Sheet-Cells($row,$col)-{'Value'},
$Sheet-Cells($row,$col)-{'Formula'};
}
}
# clean up after ourselves
$Book-Close;
請注意,您可以用以下方式很輕松地爲單元分配值:
$sheet-Cells($row, $col)-{'Value'} = 1;
Linux 示例:解析
本節適用于 UNIX,特別適用于 Linux。沒有在 Windows 中測試它。
很難給出一個比 Spreadsheet::ParseExcel 模塊文檔中所提供的示例更好的 Linux 解析示例,因此我將演示那個示例,然後解釋其工作原理。
下載 parse-excel.pl
清單 3:parse-excel.pl
#!/usr/bin/perl -w
use strict;
use Spreadsheet::ParseExcel;
my $oExcel = new Spreadsheet::ParseExcel;
die "You must provide a filename to $0 to be parsed as an Excel file" unless @ARGV;
my $oBook = $oExcel-Parse($ARGV[0]);
my($iR, $iC, $oWkS, $oWkC);
print "FILE
:", $oBook-{File} , "\n";
print "COUNT :", $oBook-{SheetCount} , "\n";
print "AUTHOR:", $oBook-{Author} , "\n"
if defined $oBook-{Author};
for(my $iSheet=0; $iSheet {SheetCount} ; $iSheet++)
{
$oWkS = $oBook-{Worksheet}[$iSheet];
print "--------- SHEET:", $oWkS-{Name}, "\n";
for(my $iR = $oWkS-{MinRow} ;
defined $oWkS-{MaxRow} && $iR {MaxRow} ;
$iR++)
{
for(my $iC = $oWkS-{MinCol} ;
defined $oWkS-{MaxCol} && $iC {MaxCol} ;
$iC++)
{
$oWkC = $oWkS-{Cells}[$iR][$iC];
print "( $iR , $iC ) =", $oWkC-Value, "\n" if($oWkC);
}
}
}
此示例是用 Excel 97 測試的。如果它不能工作,則試著將它轉換成 Excel 97 格式。Spreadsheet::ParseExcel 的 perldoc 頁也聲稱了 Excel 95 和 2000 兼容性。
電子表格被解析成一個名爲 $oBook 的頂級對象。$oBook 具有輔助程序的特性,例如“File”、“SheetCount”和“Author”。 Spreadsheet::ParseExcel 的 perldoc 頁的工作簿一節中記載了這些特性。
該工作簿包含幾個工作表:通過使用工作簿 SheetCount 特性叠代它們。每個工作表都有一個 MinRow 和 MinCol 以及相應的 MaxRow 和 MaxCol 特性,它們可以用來確定該工作簿可以訪問的範圍。Spreadsheet::ParseExcel perldoc 頁的工作表一節中記載了這些特性。
可以通過 Cell 特性從工作表獲得單元;那就是清單 3 中獲得 $oWkC 對象的方式。Spreadsheet::ParseExcel 的 perldoc 頁的 Cell 一節中記載了 Cell 特性。根據文檔,似乎沒有一種方式能夠獲得特定單元中列出的公式。
Linux 示例:寫入
本節適用于 UNIX,特別適用于 Linux。沒有在 Windows 中測試它。
Spreadsheet::WriteExcel 在 Examples 目錄中帶有許多示例腳本,通常可以在 /usr/lib/perl5/site_perl/5.6.0/Spreadsheet/WriteExcel/examples 下找到這些腳本。它可能被安裝在其它各處;如果找不到那個目錄,請與您的本地 Perl 管理員聯系。
壞消息是 Spreadsheet::WriteExcel 無法用于寫入現有 Excel 文件。必須自己使用 Spreadsheet::ParseExcel 從現有 Excel 文件導入數據。好消息是 Spreadsheet::WriteExcel 與 Excel 5 直至 Excel 2000 兼容。
這裏有一個程序,它演示如何從一個 Excel 文件抽取、修改(所有數字都乘以 2)數據以及將數據寫入新的 Excel 文件。只保留數據,不保留格式和任何特性。公式被丟棄。
下載 excel-x2.pl
清單 4:excel-x2.pl
#!/usr/bin/perl -w
use strict;
use Spreadsheet::ParseExcel;
use Spreadsheet::WriteExcel;
use Data::Dumper;
# cobbled together from examples for the Spreadsheet::ParseExcel and
# Spreadsheet::WriteExcel modules
my $sourcename = shift @ARGV;
my $destname = shift @ARGV or die "invocation: $0 ";
my $source_excel = new Spreadsheet::ParseExcel;
my $source_book = $source_excel-Parse($sourcename)
or die "Could not open source Excel file $sourcename: $!";
my $storage_book;
foreach my $source_sheet_number (0 .. $source_book-{SheetCount}-1)
{
my $source_sheet = $source_book-{Worksheet}[$source_sheet_number];
print "--------- SHEET:", $source_sheet-{Name}, "\n";
# sanity checking on the source file: rows and columns should be sensible
next unless defined $source_sheet-{MaxRow};
next unless $source_sheet-{MinRow}
(王朝網路 wangchao.net.cn)
2014年9月8日 星期一
指定畫面單身資料匯出 Excel
http://4shiun.blogspot.tw/2013/01/excel.html
TIPTOP 提供一個的 Library 可以將畫面單身的資料匯出到 Excel ,
例如:CALL cl_export_to_excel(ui.Interface.getRootNode(),base.TypeInfo.create(g_sfq),'','')
但是有程式在視窗上是有二個單身,像是工單發料、工單退料、付款沖帳、收款沖帳…等,
或是有程式會開啟另一個視窗的明細資料,像出貨單的單價,應付帳款的多發票…等。
同一支程式會呼叫多個畫面或是有多單身的情況時,
用 cl_export_to_excel 就會發現,怎麼匯出到 Excel 的資料是對的,但是欄位的名稱是錯的。
造成匯出來就會不整齊,不會依序排好。
因為 ui.Interface.getRootNode() 都是抓第一個顯示的單身來當作匯出的資料陣列。
所以我們就要把 ui.Interface.getRootNode() 改成正確的 node (節點)。
TIPTOP 並非 MDI 視窗架構,所以一個 Windows 只會有一個 Form。
畫面的架構:
UserInterface
|--Windows
| |-- Form
| | |--Table
| |--Dialog
|--TopMenu
|--ToolBar
如下圖所示:
參考 4js 網站說明,提供 ui.window 的函數說明:
CLASS Method:
forName( name STRING ):回傳目前是否有開啟 name 視窗,並傳回位置
getCurrent():回傳目前的視窗位置
OBJECT Method:
findNode( t STRING, n STRING ):找尋類型為 t,且名稱為 n 的節點
createForm( n STRING ):開啟一個新的畫面,且傳回新畫面的位置
getForm():回傳目前畫面的位置
getNode():回傳目前節點的位置
setText( t STRING ) :設定視窗的標題名稱
getText():回傳視窗的標題名稱
setImage( n STRING ):設定視窗的 icon 圖示
getImage():回傳視窗的 icon 圖示
首先要先宣告二個變數:
DEFINE w ui.Window
DEFINE n om.DomNode
再來就是要取得目前的視窗和要匯出 Excel 的 Node:
如果是新的視窗來顯示的話,只要用 getNode 即可,
LET w = ui.Window.getCurrent()
LET n = w.getNode()
如果是多單身的視窗,就要告訴系統是那一個單身 Node:
LET w = ui.Window.getCurrent()
LET n = w.findNode("Table","s_sfs")
然後再修改 cl_export_to_excel 把 ui.Interface.getRootNode() 改為 n 就可以了,
CALL cl_export_to_excel(n,base.TypeInfo.create(g_sfs),'','')
TIPTOP 提供一個的 Library 可以將畫面單身的資料匯出到 Excel ,
例如:CALL cl_export_to_excel(ui.Interface.getRootNode(),base.TypeInfo.create(g_sfq),'','')
但是有程式在視窗上是有二個單身,像是工單發料、工單退料、付款沖帳、收款沖帳…等,
或是有程式會開啟另一個視窗的明細資料,像出貨單的單價,應付帳款的多發票…等。
同一支程式會呼叫多個畫面或是有多單身的情況時,
用 cl_export_to_excel 就會發現,怎麼匯出到 Excel 的資料是對的,但是欄位的名稱是錯的。
造成匯出來就會不整齊,不會依序排好。
因為 ui.Interface.getRootNode() 都是抓第一個顯示的單身來當作匯出的資料陣列。
所以我們就要把 ui.Interface.getRootNode() 改成正確的 node (節點)。
TIPTOP 並非 MDI 視窗架構,所以一個 Windows 只會有一個 Form。
畫面的架構:
UserInterface
|--Windows
| |-- Form
| | |--Table
| |--Dialog
|--TopMenu
|--ToolBar
如下圖所示:
參考 4js 網站說明,提供 ui.window 的函數說明:
CLASS Method:
forName( name STRING ):回傳目前是否有開啟 name 視窗,並傳回位置
getCurrent():回傳目前的視窗位置
OBJECT Method:
findNode( t STRING, n STRING ):找尋類型為 t,且名稱為 n 的節點
createForm( n STRING ):開啟一個新的畫面,且傳回新畫面的位置
getForm():回傳目前畫面的位置
getNode():回傳目前節點的位置
setText( t STRING ) :設定視窗的標題名稱
getText():回傳視窗的標題名稱
setImage( n STRING ):設定視窗的 icon 圖示
getImage():回傳視窗的 icon 圖示
首先要先宣告二個變數:
DEFINE w ui.Window
DEFINE n om.DomNode
再來就是要取得目前的視窗和要匯出 Excel 的 Node:
如果是新的視窗來顯示的話,只要用 getNode 即可,
LET w = ui.Window.getCurrent()
LET n = w.getNode()
如果是多單身的視窗,就要告訴系統是那一個單身 Node:
LET w = ui.Window.getCurrent()
LET n = w.findNode("Table","s_sfs")
然後再修改 cl_export_to_excel 把 ui.Interface.getRootNode() 改為 n 就可以了,
CALL cl_export_to_excel(n,base.TypeInfo.create(g_sfs),'','')
2014年9月1日 星期一
古龍 名言錄
http://zh.wikiquote.org/zh-tw/%E5%8F%A4%E9%BE%99
不說話並不能算是絕對沉默,可怕的是那種絕對的沉默。
沉默有時也鋒利得像刀鋒一樣,有時甚至能殺人。 假如你曾經認為一個人是你的朋友,那麼這個人就永遠都是。 卑鄙的朋友,遠比正直的仇敵要可怕得多
- 人在江湖,真的身不由己啊!
- 還有人可以相思至少總比沒有人相思好。
- 驕傲本就是件愚蠢的事哪。
- 路本是同樣的路,只看你怎麼樣去走而已。
- 棋局就是人生,只要一著走錯,就非錯不可。
- 一個人的命運如何,本就是他自己造成的,所以正直勤勉的人,總是會有很運氣。
- 世上絕不會有那麼巧的事,也絕不會突然發生奇蹟,奇蹟本就都是人造成的。
- 艱苦的經驗,豈非總是能使人生更充足,更豐富。
- 要得到真正的快樂歡愉,豈非總是先付出艱苦的代價。
- 一個人的確不能太愛一個人,若是愛得太深,通常總是悲劇。
- 人生為什麼要有這麼多悲劇?
- 一個人內心深處,往往會有些秘密是自己都不知道的──也許不是真的不知道,只不過是不敢去把它發掘出來而已。
- 每個人都應該有自信,可是太自信了,也不是好事。
- 一個人最接近成功的時候,往往就是他最大意的時候。因為他認為成功已唾手可得,警戒之心就鬆了,就會變得自大起來。
- 一個人如果要做一件事,最好就不要問它的結局,只該問這件事是不是值得去做,在做這件事的時候是不是能夠讓別人快樂,自己振奮。
- 人總有人性,人性中總有善良的一面。
- 一個人若迷失了自己,那麼除了他自己之外,還有誰能找到他呢?
- 無論甚麼事都一樣,你要求是完美,就得先對它有一種狂熱的愛好。
- 自古以來,無論是誰想站在群山最高處,就得先學會如何忍受寂寞。
- 只要你肯去領略,就會發現人生本是多麼可愛,每個季節裏都有很多足以讓你忘記所有煩惱的賞心樂事。
- 一天中最黑暗的時候,也正是最接近光明的時候。人生也一樣。只要你能把這段艱苦黑暗時光挨過去,你的生命立刻就會充滿了光明和希望。
- 一個人只要活在世界上,就一定要受到某種約束。假如每個人都把自己想做的事做了出來,這世界還成甚麼樣子?
- 天網恢恢,疏而不漏。冥冥之中竟彷彿真的有種神秘力量,在主宰著人類的命運,絕沒有任何一個應該受懲罰的人,能逃過「它」的制裁。
- 黃金般的童年,甜蜜的往事,就連往日的痛苦,現在都已變得很甜蜜。原來生命竟是如此可愛,人們為什麼偏偏是要等到垂死時才珍惜?
- 能死在光明中,至少總比永遠活在黑暗中好得多。
- 一個人之所以能夠成功,就因為他往往能夠憑著一股超人的意志力和求生能力,超越他自己體能的極限。
- 一個人恐懼到了極點時,全身反而會莫名其妙的輕鬆。
- 只要是人,就有痛苦,祇是你有沒有勇氣去克服它而已,如果你有這種勇氣,它就會變成一種巨大的力量,否則,你祇有終生被它踐踏奴役。
- 一個勇者和一個懦夫之間最大的差異,那便是勇者的勇氣除了在必要的時候,永遠不會在平時顯露,而懦夫的勇氣卻在最需要勇氣的時候,反而消失了
- 勝利是絕沒有僥倖的,你要得勝,就一定要付出代價。
- 世界上的事情,若是有人把你推到再不能不幹的地步上,那此事你千萬幹不得——這裡可以肯定說是懷著你不知道的某種目的。
- 一個人在自我慚愧不安時,往往就會想去傷害別的人。
- 世上絕沒有任何事,能比被人逼著你作全無把握的決定更可怕!
- 祇有看不見的危險,才是最可怕的。
- 就算別人對你是一種阿諛或是高估,你也以為總比低估你好些。
- 愚我一次,其錯在人。若是能同樣佯騙我兩次,就是我自己的錯了。
- 眼睛可以傳神,也能泄露秘密。
- 有時不用眼睛而用腦子就能知道一些相當秘密的事。
不說話並不能算是絕對沉默,可怕的是那種絕對的沉默。
沉默有時也鋒利得像刀鋒一樣,有時甚至能殺人。 假如你曾經認為一個人是你的朋友,那麼這個人就永遠都是。 卑鄙的朋友,遠比正直的仇敵要可怕得多
- 有的人與人之間,就像是流星一般,縱然是一瞬間的相遇,也會迸發出令人眩目的火花。
- 一個人既能損人也要能被損才是真本事,就和武功一樣,能打人也要經得起挨揍才是真功夫。
- 等待是一種折磨,尤其這等待不知要什麼時候結束。
- 人臉上的表情在賭場裡可說全看得到:貪婪、奸詐、自私、懊悔、悔恨、痛苦。
- 越有趣的事越不能做得太多,否則就會變成很無趣了。
- 一個人習慣,往往是別人都知道,而自己卻是唯一不知道的人。
- 再見的意思往往也是最好不要再見。
- 當一個人不肯承認他害怕的時候,也就是怕得要命的時候。
- 一個人心裡的秘密如果是絕不能對人說出來的,就會變成種痛苦,變成種壓力。
- 能夠把心裡不能對人說的話說出來,就算死,也死得痛快。
- 好管閒事的人通常也都是不怕麻煩的人。
- 外表越凶的人,內心一定越懦弱。
- 人的意念,都是在一剎那間決定的,恆古以來,又有誰能預先知道自己要做什麼呢?在下一刻會做出什麼樣的舉動?
- 一個人之所以能活下去,也許就因為永遠有個明天。
- 黑暗無論多麼深沉,光明遲早還是要到來的。正如睡眠無論多麼甜蜜,也遲早有清醒的時候。
- 智慧豈非也像是刀一樣,受的折磨越多,就被磨得越鋒利。
- 光明也正如黑暗一樣,總是忽然而來,誰也不知道它什麼時候會來,但是你一定要有信心,一定要相信它遲早總會來的。
- 星光比家鄉更遠,可是星光看得見,家鄉呢?
- 自古以來,黑暗豈非就是恐懼的根源?
- 每個人都有自己的命運,如果太輝煌,就可能較短促;你願意做顆流星,還是做個蠟燭?流星的光芒雖短暫,可是那種無比的輝煌和美麗,又豈是千萬根蠟燭所能比得上的?
- 一個人只要求得心裡的平衡,無論犧牲什麼,都是值得的。
- 一個人心裡若不平靜,活著太痛苦了。
- 平時靜若處子,動時必若脫免;平時若是不發,發時必定驚人
- 一個人自己做錯了事,卻將錯誤發生的原因歸咎到別人身上,自己心裡非但沒有悔疚反而充滿了仇恨,反而要去對別人報復。這種行為本來就是人類最原始的弱點之一。
- 一個人的內心如果充滿了自卑,往往就會變成一個最驕傲的人。
- 一個真正的聰明人,絕不會低估自己的敵人,卻希望敵人低估他。
- 一個字或者一句話,往往就能把一個人騙得團團轉。
- 人類的思想就是這樣難以控制,一旦想到,再也驅除不了。
- 最使人絕望的就是自己厭惡自己。
- 一個人臨死的時候,往往也就是他一生中最清醒的時候。
- 真正聰明的人,永遠不會將別人當做獃子。因為將別人當做獃子的人,到最後總是往往會發現,真正的獃子不是別人,是自己。
- 一個人心裡越恐懼時,說話的聲音往往就越大。
- 沒有人應該受侮辱,也沒有人有權侮辱別人。
- 美,只不過是一瞬間的感覺,祇有真實才是永恆的。
- 我只要能把握住那一剎間的美就已足夠,永恆的事且留待予永恆,我根本不必理會。
- 世上最難瞭解的,就是人心和人性。人性的復雜,遠在天下任何一種武功之上。但你若不能瞭解人性,武功也就永遠無法達到巔峰,因為無論什麼事,都是和人性息息相關的,武功也不例外。
- 有時你甚至明知別人在騙你,卻還是寧願被騙。因為你覺得只要有一個人對你說的是真話,你犧牲的代價就已值得。
- 一個人若是太聰明了,知道的事太多,也許慢慢就會變成個瘋子。因為到了那種時候,他就會覺得做了瘋子就會變得快樂些,所以有些人最大的痛苦就是他明明想做瘋子,卻做不到。
- 世上大多數人都有這麼一張面具的,平時雖然看不到它,但到了必要時,就會將這張面具戴起來。有人是為了要隱藏自己的悲哀;有人是為了要隱藏自己的憤怒;有人是逼不得已,不得不以笑臉迷人;有的人為了要叫別人怕他。也有人是為了要隱藏自己的恐懼!
- 大多數人都有幾張不同的臉,他們若要變臉時,就好像戲子在換面具,甚至比換面具還要簡單。面具換得多了,漸漸就會將忘記自己本來是什麼樣的一張臉。面具戴得久了,就再也不願拿下來。因為他們發覺,面具越多,吃的虧就越少。
- 一個人若是總不為自己著想,活著也未免太可憐了。但是一個人若總是為自己著想,活著也實在無趣得很。
- 一天中最黑暗的時候,也正是最接近光明的時候。人生也一樣,只要你能把這段艱苦黑暗的時光挨過去,你的生命立刻就會充滿了光明和希望。
- 最後的一道陽光,總是最輝煌美麗的——有時生命也是如此。
- 別無選擇!無可奈何!人生中最悲慘的境界不是生離,不是失望,不是挫敗。
- 人生中最悲慘的境界,就是到了這種無可奈何、別無選擇的時候。
- 人生在世,不幸的事情雖然不少,但當運氣來臨的時候,就算關上大門也是一樣阻攔不住的。
- 這個世界上,這個人生,再也沒有比「想」更不快樂的事了,從古到今,從今到外,從死到活,都沒有。因為你想的事,通常都是你絕對做不到的。你日日夜夜的去想,想得要死要活,想得死去活來,想得滿地亂爬,想到快要痴了,你能想得到嗎?哈哈。
- 有些人縱然還沒有死,也等於是個死人。也有些雖然真的死了,卻永遠是活著的,活在人們心裡。
- 沒有必要時,他從不說謊——所以他說的謊才特別有效。
- 說謊最初的動機只不過是保護自己,一個人要說過很多次慌之後,才懂得如何用謊話來欺騙別人。
- 只道無情卻有情,情到濃時情轉薄。
- 多情自古空餘恨。不幸的是,一個人往往會偏偏去愛一個不值得愛的人,因為情感本就如一匹脫韁的野馬,誰也無法控制,誰都無可奈何。這本也是人類最深邃的悲哀之一。也正因如此,所以人世間永遠不斷有悲劇演出。
- 你將一個人思念的次數少了些時,並不表示你已忘了他,只不過是因為這相思已入骨。
- 盡量想法子讓別人低估你,但絕不要低估了你的敵人。
- 高手相爭祇有第一擊才是真正可以致命的一擊。一擊之後,盛氣已衰,自信之心也必將減弱,再擊就更難出手。
- 無論多聰明的人,心裡若有些畏懼,也會變笨的。所以你若想擊倒一個人,最好的辦法,就是讓他自己心裡先覺得恐懼,那麼用不著你出手,他自己就先已將自己擊倒。
- 一個人若已連自己都輕視自己,又怎能期望別人看重你。
- 武器是否可怕,主要得看它是在什麼人手裡。
- 高手對招,武功強弱固然是勝負的最大關鍵,但出手時的判斷是否正確,更是致命的因素。
- 以牙還牙,以血還血,這本就是江湖中最古老的規律。
- 卑鄙的計劃,往往也最容易成功。
- 能後發制人的,絕對比先發制人更可怕。
- 不要命的人,就是最可怕的人,不要命的武功,就是最可怕的武功。
- 古往今來,真正的武林高手,都是特立獨行、不受影響的人,一個人若連自己獨特的個性都沒有,又怎麼能練得出獨特的武功來?
- 懂得用刀殺人,並不困難,要懂得如何用刀救人,才是件困難的事。
- 一件兵器的真正價值,並不在它的本身,而在於它做的事。
- 看不見的刀,才是最可怕的刀。能令人看不出他真正面目的人,才是最可怕的人。
- 可以嚇死人的刀,通常都是看不見的刀。因為等你看見它時,就已太遲了。*
- 真正偉大的武功,並不僅僅是用聰明和苦功就能練出來的。
- 你一定先得有一顆偉大的心,才能練得真正偉大的武功。
- 劍是優雅的,是屬於貴族的,刀卻是普遍化的,平民化的。有關劍的聯想,往往是大宮廷裡,在深山裡,在白雲間。刀卻是和人類的生活息息相關的。奇怪的是,在人們的心目中,刀遠比劍更殘酷更慘烈更兇悍更野蠻更剛勇。*
- 讓人看不懂的招式,總是讓人不能不佩服的。
- 武者碰上了對手,就如同一般人尋到了知音是同樣的道理,因此在未卜生死之下,也或多或少的有種莫名的喜悅和興奮。
- 你若愛過一個人,恨他時才會恨得更深。
- 你心裡若已沒有愛,祇有仇恨,地獄就在你的心裡,你自己也已在地獄。
- 仇恨就像債務一樣,你恨別人時,就等於你自己欠下了一筆債,你心裡的仇恨越多,那麼你活在這世上,就永遠不會再有快樂的一天。
- 仇恨,本是種原始的,單純的情感。
- 仇恨是後天的,所以每個人都可以會恨錯,祇有愛才是永遠不會錯的。**
- 仇恨所能帶給一個人的,祇有痛苦和毀滅,愛才是永恆的。
- 仇恨!有時甚至連愛的力量都比不上仇恨!
- 仇恨和愛不一樣,仇恨並不是天生的。
- 仇恨本不是天生的,但仇恨若已在你心裡生了恨,世上就絕沒有任何力量能拔掉。
- 仇恨並不是種絕對的感情,仇恨的意識中,有時還包括了瞭解與尊敬。只可惜可愛的仇人不多,值得尊敬的仇人更少。
- 嫉妒與懷恨乃是世上最強烈的情感,尤其是在女子心中,更遠比愛心強烈得多。女子與女子間的嫉妒與懷恨,是永遠不會消失的。女子若是恨上另一個女子,必定恨上一生。
- 愛和恨最大的不同,是愛能使人憧憬未來,能使人對未來充滿希望。恨卻祇有使人想到過去那些痛苦的往事。
- 常言道,愛之越深,恨之越切。愛之深時,恨不得將兩人揉碎,合成一個,恨之切時,卻又恨不得將他碎屍萬段,銼骨揚灰。
- 恨與愛之間的距離,本僅相隔一線,愛得越深,恨得也就更強烈。
- 對於一個憎恨自己的人越表現得不在乎,往往就越使那個人憤怒。
- 就算敗,也要在敗中求勝。永不妥協,永不退讓一寸一分。 每個人一生中都要死一次的,但是有些人卻可以一生永遠不敗。
- 劍不是用來在背後殺人的,若是背後傷人,就不配用劍。 制敵取勝的武功也有很多種,有的以「氣」勝,有的以「力」勝,有的以「勢」勝,有的以「巧」勝。
- 一個人成名的一戰,通常也是他傷心的一戰,一戰功成,心 傷如死。在他以後活著的日子裡,有時甚至會希望在那一 戰里死的不是他的仇敵而是他。
- 搶就是不搶,不搶就是搶,後發制人,以靜制動,劍法的精義,已盡在其中。
- 世上有很多事,並不是武功可以解決的。人所以為萬物之靈,只因為他的智慧,並不是因為他的力氣,若論力氣,連 匹驢子都要比人強得多。
- 你若不得不懷疑一個你所最親近信賴的人,那實在是件痛苦的事。
- 痛苦本就可以刺激人的神經,令人的反應敏銳,也可以激發人的潛力——就算是一匹馬,當你鞭打它、令它覺得痛苦時,它也會跑得快些。負了傷的野獸也通常都比平時更兇猛!
- 人類最大的痛苦,也許就是永遠無法控制自己的思想。你若拚命想去回憶過去那些有趣的事情,但想到的偏總是那些辛酸和痛苦,那時你心裡就會覺得好像有根針在刺著。
- 一個人若看到別人比他更痛苦,他自己的痛苦就會減輕。
- 一個完全沒有痛苦的人,又怎能真正領略到歡樂的滋味。
- 一個人在真正痛苦時,非但已不再有拒絕的力量和尊嚴,也已不再的拒絕的勇氣。
- 人類最大的痛苦,就是心裡總是會想起一些不該想、也不願去想的事。
- 祇有真正無情的人,才沒有痛苦。
- 沒有表情時就是一種最痛苦的表情。
- 你祇有在真正愛上一個人的時候,才會有真正的痛苦。
- 只要你真正愛過,痛苦也是值得的。
- 在歡樂的地方,為什麼不能有痛苦的往事?
- 若沒有歡樂,哪裡來的痛苦?
- 痛苦與歡樂的距離,豈非本就在一線之間?
- 人心裡的痛苦,有時正像是腐爛的傷口一樣,你越不去動它,它爛得越深,你若狠狠給它一刀,讓它流膿流血,它反而就不定會收口。
- 真正的痛苦,反而不會讓人有痛苦的感覺。
- 這世上除了仇恨之外,還有一種比仇恨更可怕的感情——痛苦。
- 仇恨令他想毀滅的,只不過是他的仇人,但這種感情使得他想毀滅自己,想毀滅整個世界。
- 人之所以會有痛苦,那是因為人類是有情感的動物。
- 你祇有在真正愛上一個人的時候,才會有真正的痛苦。——這本來就是人類最大的悲哀之一。
- 他心中雖有悲哀,卻不願讓人也來負擔他的悲哀的痛苦——悲哀,永遠只適於獨自咀嚼的。
- 死,並不痛苦,痛苦的是等死的時候。
- 有些人也許真不知道自己是為了什麼而活著的,但還有些更可憐,他們甚至不知道自己是為了什麼而死的。
- 一個人做的事若都已在別人意料之中,他活著豈非也和死了差不多。
- 一個病重的人,是不是能活下去,至少有一半要看他自己是不是想活下去。
- 他無視成敗,蔑視死亡,更看不起世上的虛名與財富,可是,他無法逃避隱藏在自己心底深處的情感。他有無畏的勇氣,面對一切,他有鋒利的長劍,縱橫天下,可是……他斬不斷心裡的情絲。
- 自己不想死的人,通常也不想要別人死。這句話的另一方面也同樣正確。
- 你若想殺人,就得准備著被殺!
- 死亡,是公平的。在死亡面前,最偉大的人也會變得平凡。
- 死人能告訴你的事,也許比活人還多,而且也遠比活人可靠。
- 每個人遲早總會倒下。無論他生前多麼顯赫,等他倒下去時,看來也和別人完全一樣。
- 一個人在經歷了那許多「生」與「死」之後,心性的轉變絕非一般人可以想像。
- 生命竟是如此美好,一個人只要能活著,就已經是件值得慶幸的事。
- 不想死的人,也會死的。越不想死的人,有時候反而死得越快。
- 人類最神秘最殘酷而且最無可避免的敵人——死亡。
- 在人類的生命歷史中說來,死亡豈非都是一種沒有人能夠猜測得到的詭秘游戲。
- 人生的初戀祇有一次,就正如死亡也祇有一次一樣。
- 死,並不可怕,也不可悲。可怕的,悲哀的,是那些活在「生不如死」世界裡的一群人。(1月6日名言)
- 天下地下,再也沒有任何事比死更真實。
- 一個人活著並不是只為了自己,這世界上有很多人都是為了別人而活著的。如果你已經擔起了一付擔子,就不要隨便放下去。
- 死,多麼珍貴,祇有一次,絕無兩次。
- 生命本身的價值,卻是絕對平等的。誰也沒有權利認為自己的生命比別人的生命更有生存的價值,誰也沒有權利認為自己的生命遠比別人可貴。
- 語不驚人,不如不說;人不快活,死了算了。
- 活著的人,有時比死了的人還要可憐許多哩
訂閱:
文章 (Atom)