有時候要將Perl程式給別人使用,但對方又沒裝Perl Interpreter,就要把PL檔案轉換成EXE檔比較通用。在Perl中現在可以使用Free的套件"App::Packer::PAR",就能轉換出EXE執行檔,但一個小程式也會有4MBytes以上的大小,且啟動速度會比較慢一點。
- Dec 28 Sat 2013 22:26
將Perl Script轉換成EXE執行檔,順便把肥大執行檔壓縮。
- Dec 14 Sat 2013 00:35
flickr下載圖片的方法(二)
1. 首先到嘴砲論壇討論區下載檔案
網頁連結:http://www.mobile01.com/topicdetail.php?f=248&t=3525141&r=2&last=47686132
- Dec 08 Sun 2013 23:18
RAW+JPEG+TIFF_paired_Folder_2第三版,同步JPEG, NEF, TIFF。
# 將JPEG, RAW, TIFF三個目錄同步
# 2013/12/28加上checkDirectoryExist,修正問題
use strict;
use File::Copy;
use File::Basename;
use Time::HiRes qw(gettimeofday);
use 5.010;
my $t0 = gettimeofday;
my $DestRAW = "NEF/";
my $DestJPEG = "JPEG/";
my $DestTIFF = "TIFF/";
my $DelFolder = "_del/";
#檢查目錄是否存在
&checkDirectoryExist($DestRAW, $DestJPEG, $DestTIFF);
chdir $DestJPEG;
my @fileJPG = glob "*.JPG";
chdir "..";
chdir $DestRAW;
my @fileRAW = glob "*.NEF";
chdir "..";
chdir $DestTIFF;
my @fileTIF = glob "*.TIF";
chdir "..";
###############################################################################
mkdir $DelFolder;
#處理JPEG與RAW配對
&moveFile($DestJPEG, $DestRAW, $DelFolder, @fileJPG);
&moveFile($DestRAW, $DestJPEG, $DelFolder, @fileRAW);
#處理JPEG與TIFF配對
&moveFile($DestJPEG, $DestTIFF, $DelFolder, @fileJPG);
&moveFile($DestTIFF, $DestJPEG, $DelFolder, @fileTIF);
#處理JPEG與RAW配對
&moveFile($DestJPEG, $DestRAW, $DelFolder, @fileJPG);
&moveFile($DestRAW, $DestJPEG, $DelFolder, @fileRAW);
my $t1 = gettimeofday;
printf("Time: %3.3f sec\r\n", $t1 - $t0);
system("pause");
sub moveFile() {
for (3..$#_) {
my $src = $_[1].uc( $_[$_] );
if ( $_[0] eq $DestJPEG && $_[1] eq $DestRAW) {
$src =~ s/\.JPG/\.NEF/gi;
} elsif ( $_[0] eq $DestRAW && $_[1] eq $DestJPEG) {
$src =~ s/\.NEF/\.JPG/gi;
} elsif ( $_[0] eq $DestJPEG && $_[1] eq $DestTIFF) {
$src =~ s/\.JPG/\.TIF/gi;
} elsif ( $_[0] eq $DestTIFF && $_[1] eq $DestJPEG) {
$src =~ s/\.TIF/\.JPG/gi;
}
#say $src;
if ( !-e $src ) {
my $dest = $_[2].$_[$_];
say "Moving file: ".$_[0].$_[$_].' to '.$dest;
move($_[0].$_[$_], $dest) if (-e $_[0].$_[$_]);
}
}
}
sub checkDirectoryExist {
for(@_) {
if(!-e $_) {
say "Not found \"$_\"";
die;
}
}
}
- Nov 28 Thu 2013 23:30
flickr下載圖片的方法(一)
- Oct 09 Wed 2013 00:53
TP-Link WR1043ND開大量連線會斷線
TP-Link WR1043ND分享器,用Google Chrome或者Firefox開大量連線(40個網頁以上)後,會自己斷線。更新技術支援推薦的韌體後,有一點改善可以連開八十個了,但還是不太穩。
- Sep 20 Fri 2013 00:15
使用Git hook在commit發送email
- Sep 19 Thu 2013 12:16
Opensuse 12.3開機很慢
- Sep 17 Tue 2013 23:40
使用blat透過smtp寄送mail
blat home
- Sep 11 Wed 2013 23:28
Cygwin使用小技巧
- Sep 10 Tue 2013 22:23
手動安裝Git 1.8.4與subtree
- Sep 08 Sun 2013 14:10
Delphi/Lazarus三種開啟binary file的方法
procedure BenchmarkFileStream(AFile: string);
var
I, Position, PackageCount: cardinal;
FS: TFileStream;
Buffer: byte;
T0: double;
begin
T0 := Now;
Buffer := 0;
try
FS := TFileStream.Create(AFile, fmOpenRead);
PackageCount := FS.Size div 188;
if PackageCount > 0 then
for I := 0 to PackageCount - 1 do
begin
try
FS.Position := I * 188;
FS.ReadBuffer(Buffer, 1);
except
on E: Exception do
WriteLn('Exception: ' + E.Message);
end;
end
finally
FS.Free;
end;
WriteLn('FileStream Time: ' + IntToStr(MilliSecondsBetween(T0, Now)));
end;
procedure BenchmarkBufferIO(AFile: string);
var
I, Position, PackageCount: cardinal;
Buffer: byte;
T0: double;
MyFile: file;
NumberRead: word;
begin
T0 := Now;
Buffer := 0;
try
AssignFile(MyFile, AFile);
Reset(MyFile, 1);
PackageCount := FileSize(MyFile) div 188;
if PackageCount > 0 then
for I := 0 to PackageCount - 1 do
begin
try
Seek(MyFile, I * 188);
BlockRead(MyFile, Buffer, SizeOf(Buffer), NumberRead);
except
on E: Exception do
WriteLn('Exception: ' + E.Message);
end;
end
finally
Close(MyFile);
end;
WriteLn('BufferIO Time: ' + IntToStr(MilliSecondsBetween(T0, Now)));
end;
procedure BenchmarkFileHandle(AFile: string);
var
FileHandle: integer;
I, PackageCount: cardinal;
Buffer: byte;
T0: double;
MyFile: file;
begin
T0 := Now;
Buffer := 0;
try
AssignFile(MyFile, AFile);
Reset(MyFile, 1);
PackageCount := FileSize(MyFile) div 188;
Close(MyFile);
FileHandle := FileOpen(AFile, fmOpenRead);
Filemode := fmOpenRead;
if PackAgeCount > 0 then
for I := 0 to PackageCount - 1 do
begin
try
FileSeek(FileHandle, I * 188, 0);
FileRead(FileHandle, Buffer, SizeOf(Buffer));
except
on E: Exception do
WriteLn('Exception: ' + E.Message);
end;
end
finally
FileClose(FileHandle);
end;
WriteLn('FileHandle Time: ' + IntToStr(MilliSecondsBetween(T0, Now)));
end;
- Jul 10 Wed 2013 21:19
快速搜尋文字
ComboBox1.ItemIndex:=ComboBox1.Perform(CB_FINDSTRING, -1, LongInt(PChar('要找的字')));
- Jul 08 Mon 2013 01:11
Delphi動態產生物件時,為Event指定一個程序或函數
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Image1: TImage;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure imgTestClick(Sender: TObject);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.imgTestClick(Sender: TObject);
begin
MessageDlg('Test Timage event', mtInformation, [mbOK], 0);
end;
procedure testCustomEvent;
var
img: TImage;
begin
img := TImage.Create(Form1); // 建立TImage物件
img.Parent := Form1; // 顯示在Form上
img.Top := 0; // 放在左上角
img.Left := 0;
// 指定自訂事件,如果是大量建立注意不要指定Name屬性,沒設定好自訂事件會編譯錯誤
img.OnClick := Form1.btnTestClick;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
// 建立物件前的元件數
ShowMessage(IntToStr(Self.ComponentCount));
testCustomEvent;
// 建立物件後的元件數
ShowMessage(IntToStr(Self.ComponentCount));
end;
end.
- Jul 07 Sun 2013 23:55
[轉貼] Delphi 函數表