網路管理語言 Perl 入門與實作: | ||
---|---|---|
<<< Previous | 6. 檔案處理 | Next >>> |
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"; |
檔案處理完之後,應該養成良好習慣,將檔案關閉,方法如下:
* close(FHD); |
用例:
#!/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); |
<<< Previous | Home | Next >>> |
6. 檔案處理 | Up | 6.3 檔案測試 |