孤獨者 - 心在黑暗裡旅行 ...... ... 至尊會員
遊蕩的過客 - 枉入紅塵若許年 .. ... - UID
- 18273
- 帖子
- 12122
- 精華
- 1273
- 積分
- 240737
- 金幣
- 492641
- 威望
- 5001
- 推廣
- 0
- 閱讀權限
- 99
- 來自
- 尋覓中
- 註冊時間
- 2006-6-24
- 最後登錄
- 2015-5-27
|
70樓
大 中
小 發表於 2006-10-26 22:16
6.2 開檔關檔
Perl 處理檔案開啟的方式有以下幾種:(FHD 為檔案代碼)引用:* 唯讀 (以下二種方式作用相同)
open(FHD, "檔名") || die "$!\n";
open(FHD, "< 檔名") || die "$!\n";
* 開啟新檔,以供寫入
open(FHD, "> 檔名") || die "$!\n";
* 開啟檔案,以增添附加的方式寫入
open(FHD, ">> 檔名") || die "$!\n";
* 開啟舊檔,以供讀寫
open(FHD, "+< 檔名") || die "$!\n";
* 開啟新檔,以供讀寫
open(FHD, "+> 檔名") || die "$!\n";
* 開啟檔案,以供讀寫或增添附加
open(FHD, "+>> 檔名") || die "$!\n";
* 開啟一道管線(pipe),以輸出至某一程式或命令
open(FHD, " | 命令") || die "$!\n";
* 開啟一道管線(pipe), 以讀取某一程式或命令的結果
open(FHD, "命令 |") || die "$!\n";
檔案處理完之後,應該養成良好習慣,將檔案關閉,方法如下:用例:引用:#!/usr/bin/perl
# 指定檔案名稱
$file_name="test.txt";
#-----------------------------------------------------------------
# 例一: 讀檔
#-----------------------------------------------------------------
# 唯讀模式開檔
open(FHD, "$file_name") || die "$!\n";
@all=<FHD>; # 讀出所有的檔案內容
# 或
while (my $line=<FHD>) {
chomp $line;
進一步處理 ....
}
# 關檔
close(FHD);
#-----------------------------------------------------------------
# 例二: 開新檔案以供寫入
#-----------------------------------------------------------------
# 開檔
open(FHD, "> $file_name") || die "$!\n";
#寫入
print FHD "Hello, world !\n";
# 關檔
close(FHD);
#-----------------------------------------------------------------
# 例三: 開啟檔案、增添資料
#-----------------------------------------------------------------
# 開檔
open(FHD, ">> $file_name") || die "$!\n";
# 增添
print FHD "Hey! What a lie!\n";
# 關檔
close(FHD); 用例一:引用:#! /usr/bin/perl
# 檔案路徑請自行修改:
$file="/home/ols3/tmp/index.html";
# 開檔
open(FHD, "$file") || die "$!\n";
# 讀出整份檔案內容
@all=<FHD>;
# 關檔
close(FHD);
$i=0;
foreach (@all) {
$i++;
# 印出每一列
print; # 作用對像為預設變數 $_
# 只印計數前 10 列
last if ($i > 10); # 若 $i > 10,last 會跳出迴圈
} 用例二:引用:#! /usr/bin/perl
# 執行法:
# chmod +x newcat.pl
# ./newcat.pl 路徑檔名
# 它會將該檔複製放入 newlog.txt 中
$file=$ARGV[0];
$log="newlog.txt";
open(FHD, "$file") || die "開啟 $file 失敗! 請檢查 $file !!!\n";
open(W, "> $log") || die "$!\n";
while (my $line=<FHD>) {
print W $line;
}
close(W);
close(FHD); 用例三:引用:#! /usr/bin/perl
$csv="studdemo.csv";
open(FHD, "$csv") || die "無法讀取 $csv 檔! 請查明原因!\n";
while (my $line=<FHD>) {
chomp $line;
($f1, $name, $f3, $f4, $f5, $f6, $f7, $pslno, $par, $f10)=split(/,/ , $line);
print "學生 $name 的身份證字號是 $pslno,其父為 $par 先生\n";
}
close(FHD);
# studdemo.csv 的內容如下:
代號,姓名,性別,入學年,班級,座號,生日(西元),身份證字號,父親姓名,母親姓名,郵遞區號,電話,住址(不含縣市?鎮),緊急聯方式
086011,林開廉,1,86,2,1,1996/2/5,L23456700,林xx,廖xx,435,262343827,下寮裡中和街4號,0923-032870.26231296.
086012,柯政宇,1,86,2,2,1996/6/2,L14564300,柯xx,洪xx,435,67644381,文化裡7鄰東建路1號,(母)0923-032870.
086013,張勛和,1,86,2,3,1996/7/28,N15544000,張xx,陳xx,435,26341262,安仁裡5鄰梧棲路9號,0931-549242.
086014,林志成,1,86,2,4,1996/8/14,L18775000,林xx,童xx,435,265345337,中正裡7鄰中興路18巷2,0953-6916677
086015,蔡庚江,1,86,2,5,1996/2/25,L23343000,蔡xx,鄒xx,435,23453422,中正裡19鄰梧棲路11巷2號,26562451
086016,陳信宏,1,86,2,6,1996/6/5,L123253000,陳xx,鄭桂妙,435,4461943,中正裡中興路18巷1弄12號,0921-728850.
086017,林德晉,1,86,2,7,1996/7/8,L133435000,張xx,,2634521,435,中正裡3鄰仁美街3巷69號,26573434
086018,林承佑,1,86,2,8,1995/10/2,L779334000,林xx,林xx,2654348,434,南寮村8鄰中沙路2號,0912-667788.
086019,陳科全,1,86,2,9,1996/3/2,L1252343000,陳xx,黃xx,34534561,435,草湳裡建國北街24號2樓,0923-243445.
086020,陳柏仁,1,86,2,10,1995/11/6,L125231000,陳xx,黃xx,25454542,435,草湳裡1鄰梧南路2號之11,0923-300889. 用例四:將結果存在一個新檔 stu.log 中。引用:#! /usr/bin/perl
use strict;
my $file=$ARGV[0] || die "請至少要指定一個用逗點分開的 csv 資料檔名!!!\n";
my $log="stu.log";
open(FHD, "$file") || die "開啟 $file 失敗! 請檢查 $file !!!\n";
open(W, "> $log") || die "$!\n";
while (my $line=<FHD>) {
chomp $line;
my ($f1, $name, $f3, $f4, $f5, $f6, $birthday, $pslno, $papa, $nouse) = split(/,/ , $line);
print W "學生:$name,生於:$birthday,其身份證字號為:$pslno,其父為:$papa\n";
}
close(W);
close(FHD);
|