【Perl】- 轉換Pattern | 轉換文字檔時,常用的一些指令
以下針對Perl在做Pattern轉換時常用的一些指令做記錄,方便日後查詢。
開啟檔案 - 讀/寫
open (READ_HEX," < 5a13n01.hex") or die "Can't open 5a13n01.hex";
close(READ_HEX);
開啟檔案 - 寫
open (SAVE_SCAN_PAT," > SCAN.PAT") or die "Can't open SCAN.PAT";
close(SAVE_SCAN_PAT);
處理開啟的檔案
while(<READ_HEX>)
{
}
抓取同一目錄下,所有相同副檔名的檔案
$K =0;
@CMA_NAME;
while(<*.pat>)
{
$CMA_NAME[$K] = $_;
#print "$K.$_\n";
$K=$K+1;
}
字串取代
s/\s//g; # g 代表此字串的所有位置全部執行取代。
字串分割
@HEX_LINE = split/>/,$_ #
邏輯判斷 - if/else /elsif
if ($HEX_VEC[$K] eq 0)
{
$SCAN_PIN_4[$G] = L;
$SCAN_PIN_3[$G] = L;
$SCAN_PIN_2[$G] = L;
$SCAN_PIN_1[$G] = L;
} #
############################################
if (-d $TRANS_FOLDER )
{
#print "$TRANS_FOLDER Exist\n";
}
else
{
mkdir $TRILLIUM_PAT_FOLDER;
}
############################################
if ($pat_type eq "A" || $pat_type eq "a") { #modified - March 3, '05
$valid_entry = 1;
$mode = Dpm;
$max_rpts = 2047;
}
elsif ($pat_type eq "B" || $pat_type eq "b") { #modified - March 3, '05
$valid_entry = 1;
$mode = Cpm;
$max_rpts = 65536;
}
else {
print "\n\n\tInvalid entry, please select either A/a or B/b: "; #modified - March 3, '05
}
邏輯判斷 - for
for($K=0;$K<32;$K++)
{
#填入需要執行的程式碼
}
邏輯判斷 - and
&&
邏輯判斷 - or
||
副程式 - subroutin
sub PATTERN_END()
{
open (READ_PAT_END," < PATTERN_END.txt") or die "Can't open PATTERN_END.txt";
while(<READ_PAT_END>)
{
print SAVE_SCAN_PAT $_;
}
close(READ_PAT_END)
}
如何呼叫並在主程式中使用?直接將副程式的名稱貼上即可。
PATTERN_END()
檔案檢查 - 是否存在
if (-e "CORRECT.txt" ) { print 123; system("del CORRECT.txt")}
if (-e "ERROR.txt") { print 456; system("del ERROR.txt")}
目錄檢查 - 是否存在
$TRILLIUM_PAT_FOLDER = "TRILLIUM_PAT";
if (-d $TRANS_FOLDER )
{
#print "$TRANS_FOLDER Exist\n";
}
else
{
mkdir $TRILLIUM_PAT_FOLDER;
}
######################################################
if ( -d $NEW_PAT_FOLDER )
{
print "Already had a NEW_PAT exist\n";
}
else
{
mkdir $NEW_PAT_FOLDER,0777; #For UNIS system
print "Creat a NEW_PAT Floder\n";
}
命令列參數 - $ARGV[]
perl my.pl $ARGV[0] $ARGV[1] #執行方法
#程式碼應用如下,0/1/2/3... 代表命令列上的第幾個參數。編號從零開始
open(ONE,"$ARGV[0]") or die $!;
open(TWO,"$ARGV[1]") or die $!;
#如果一直抓不到值時,先確認path 是否有設定正確。
移除換行符號 - chomp
chomp($_);
$pattern[$i] = $_;
列印 - print/printf
print SAVE_LOG "other timing set be found in $AVF.pat, please check it!!\n";
printf OUTFILE "%-10s %-15s %-30s %s \n",$LABEL,$MIRCO_INSTRUCTION,$REMARK,$VECTOR;
鍵盤輸入 - STDIN
$AVF = <STDIN>; #由鍵盤輸入
迴圈 - foreach
foreach(@PAT_NAME)
{
}
時間處理
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
留言列表