Re: [問題] 遇到一個問題

看板Perl作者時間15年前 (2010/07/06 15:26), 編輯推噓1(101)
留言2則, 2人參與, 最新討論串3/3 (看更多)
可以先釐清各平台上 input record separator 的差異: 1. UNIX => LF ( Line feed、\n、\x0A ) 2. DOS => CR + LF ( \r\n ) 3. Mac OS => CR ( Carriage return、\r、\x0D ) 使用 Data::Dump 來看看現在的 input record separator 是什麼? print Data::Dump->dump($/); 另外 while (<FH>) 依據 $/ 來判斷分行讀入資料,而 chomp() 則是剔除 $/。 ==== 以下測試自動偵測 input record separator ==== use Data::Dump; my $in_file = '1.txt'; open( FH, $in_file ) or die "open file error"; $/ = undef; my $data = <FH>; close(FH); $/ = $1 if $data =~ m/([\n\r]+)/; print Data::Dump->dump($/), "\n"; foreach ( split( $/, $data ) ) { print $_, "_PAD", "\n"; } ================================================= 如果您的輸入資料大致上只有 CR+LF 或是 LF,那用 s/[\r\n]+$// 應該就夠, 或是讀入第一行時去偵測 CR+LF 還是 LF,再修改 $/ 變數,並用 chomp() 移除換行。 while (<FH>) { $/ = $1 if (m/([\r\n]+)$/); chomp; print $_, "_PAD", "\n"; } 參考: http://www.kichwa.com/quik_ref/spec_variables.html http://en.wikipedia.org/wiki/Delimiter http://en.wikipedia.org/wiki/Line_feed http://en.wikipedia.org/wiki/Carriage_return ※ 引述《oldstyle (lucky)》之銘言: : 我是在工作站上發現這個問題的 : 本來有一些資料我從excel剪貼到txt 再用ftp傳到工作站上去跑 : 結果就發生了這樣的問題 : 但是一樣的事情我在pc上面執行同一支程式 卻是ok的 : 後來我在工作站上 手key了一份一模一樣的檔案來當input file : 結果就成功了@@ : 所以在猜應該是編碼的問題 : 但是我也不太清楚就是了 : 希望有高手能幫忙解答 : 感激不盡.... >_< : ※ 引述《oldstyle (lucky)》之銘言: : : 想請教一下 遇到以下的狀況該怎麼解決? : : 我有一個檔案 想要在每一行的字串最後全部加上"_PAD" : : 本來我是這樣做的 : : ================================================= : : #! /usr/local/bin/perl -w : : use strict; : : open (file,$in_file) or die "open file error"; : : foreach (<file>) { : : chomp; : : $_ = $_."_PAD"; : : print "$_\n"; : : } : : close(file); : : ================================================= : : 本來結果應該是 : : ABCDE --> ABCDE_PAD : : FGHIJ --> FGHIJ_PAD : : 但我卻變成 : : ABCDE --> _PADE : : FGHIJ --> _PADJ : : 請問是哪邊出了問題呢?? : : 謝謝各位!!! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.114.64.133

07/13 00:40, , 1F
MacOSX現在是Unix底了,換行符號應該也是\n吧?
07/13 00:40, 1F

07/13 08:13, , 2F
是的,所以才說是 Mac OS 而不是 Mac OS X
07/13 08:13, 2F
文章代碼(AID): #1CCjgZme (Perl)
討論串 (同標題文章)
文章代碼(AID): #1CCjgZme (Perl)