2010-01-07 40 views
2

是否有像int()這樣的函數可以將字符串轉換爲浮點值? 我目前使用下面的代碼:如何將字符串轉換爲使用Perl的float?

$input=int(substr($line,1,index($line,",")-1)); 

我需要通過substr返回飄起了字符串轉換。

+0

你可以舉一個'$ line'如何生成的例子嗎? – 2010-01-07 09:04:53

+0

$行是從日誌文件中讀取的。打開(fHandle,「+ <」,$ path)或死掉「$!」; foreach $ line() \t \t {\t $ input = int(substr($ line,1,index($ line,「,」) - 1)); } 這是完整的代碼。 – fixxxer 2010-01-07 09:31:27

+0

我們是否可以從您的文件中獲取示例行,以便我們可以提出更好的方法來提取數字。 – slebetman 2010-01-07 09:41:26

回答

17

只要使用它。在Perl中,看起來像一個數字的字符串是一個數字。現在

,如果你想使用它之前確認的事情是一個數字再有就是在Scalar::Util個實用方法做的:根據您在離開樣品的輸入

use Scalar::Util qw/looks_like_number/; 

$input=substr($line,1,index($line,",")-1); 

if (looks_like_number($input)) { 
    $input += 1; # use it as a number! 
} 

意見,提取數的更強大的方法是:

$line =~ /([^\[\],]+)/; # <-- match anything not square brackets or commas 
$input = $1;   # <-- extract match 
+1

當我使用substr時,我得到以下錯誤: 參數「1258200601.5027449,」在int中不是數字test.pl – fixxxer 2010-01-07 09:30:10

+1

如果這真的是錯誤,那麼您的數字中有一個逗號,它使它不一個號碼。 – slebetman 2010-01-07 09:39:21

+0

編輯:刪除int(),因爲你想浮動... @fixxxer:對不起,我複製/粘貼你的例子。 – slebetman 2010-01-07 09:42:52

1

我不知道你的數據是什麼樣子,但你一定要明白,在第三個參數substr是一個長度,不一個位置,對吧?此外,第一個位置是0.我懷疑你沒有得到你認爲你得到的數據,並且它大多意外地起作用,因爲你從字符串的開始處開始並且只關閉一個。

+0

數據以「[」。「開頭,所以我們從0開始,而不是1開始作爲substr.Ofcourse的第二個參數,第三個必須是一個數字。代碼中的什麼讓你認爲我們忽略了? – fixxxer 2010-01-07 13:42:22

+1

index()讓我覺得你忽略了這一點,並且你沒有提取Perl認爲是一個數字的事實。向我們展示輸入數據的完整示例,因此我們不必猜測。 – 2010-01-07 13:47:06

相關問題