2013-03-13 76 views
-1

我有一個輸入文件,該文件是這個樣子

1a0i b.40.4.6 
1a49 b.58.1.1 
1a82 c.37.1.10 
1atp d.144.1.7 
. 
. 
. 
.

問題1

我把每一行到@array

當我使用

$Line = chomp($Array[0]); 
print $Line; 

顯示屏幕輸出1

but When I use 
$Line = $Array[0]; 
print $Line; 

顯示屏幕1a0i b.40.4.6

輸出爲什麼格格會讓剩下的只有一個字符$行?


Problem2

我想用B.40作爲FILE_NAME,所以這裏是我的代碼

$數組[0]是1a0i b.40.4.6

$Line = $Array[0]; 
@Element = split(" ",$Line); 
@Tiny_element = split(".",$Element[1]); 
$File_name = join(".",splice(@Tiny_element,0,2)); 

但我打印$ File_name,但它什麼都沒顯示,我使用Dumper \@Tiny_element,但它顯示爲空 我print $Element[1],它顯示b.40.4.6,我用index($Element[1],".")它顯示1所以我kn它包含「。」但它不能與「。」分開。

我試試split("\.",$Element[1]); split('.',$Element[1])之前,但它仍然沒有解決....

它有什麼問題嗎?

感謝

回答

2

答到問題1:

用途:用於

chomp($Array[0]); 
$Line = $Array[0]; 

代替:

$Line = chomp($Array[0]); 

這是因爲chomp返回值是不是字符串,但trai的數量凌字符從字符串中刪除。

答到問題2

$File_name = $1 if ($Line =~ /\s([^\.]+\.[^\.]+)/); 
+0

哦,我知道....謝謝 – user2131116 2013-03-13 12:22:09

+2

如果你知道這個問題,那又是什麼問題?順便說一句,我已經給你的第二個問題添加了答案。 – kamituel 2013-03-13 12:31:42

+0

我只知道.....我知道這很可怕..但我不知道之前,我問這個。 – user2131116 2013-03-13 13:29:54

3

或許你可以嘗試閱讀的文檔,您正在使用,而不是在它的行爲只是猜測的功能。

documentation for chomp這樣說:

它返回其所有參數

字符串代替編輯刪除的字符總數。

+0

我讀了這本書,最後我得到了問題2的答案,我應該使用@Tiny_element = split(「\\。」,$ Element [1]); – user2131116 2013-03-13 14:04:12

+0

「split」的第一個參數是一個正則表達式。如果你把它寫在'/.../'而不是''...''內,那麼你可能更有可能記住:-) – 2013-03-13 14:39:19

1

爲了您的第二個問題,如果我是通過改變你的分裂語句的第一個參數澄清你的代碼如下:

$Line = $Array[0]; 
@Element = split(/ /,$Line); 
@Tiny_element = split(/./,$Element[1]); 
$File_name = join(".",splice(@Tiny_element,0,2)); 

,並提醒大家,.是在正則表達式通配符,你會更好地理解你的錯誤?

順便說一句:/[.]/是一個偉大的正則表達式尋找文字週期。

相關問題