2010-01-07 7 views
2

문자열을 float 값으로 변환 할 수있는 int()과 같은 함수가 있습니까? 나는 현재 다음과 같은 코드를 사용하고 있습니다 : 내가 떠 substr에 의해 반환 된 문자열을 변환 할 필요가Perl을 사용하여 문자열을 float로 변환하려면 어떻게해야합니까?

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

합니다.

+0

'$ line'이 어떻게 생성되는지 예를 들려 줄 수 있습니까? –

+0

로그 파일에서 $ line을 읽습니다. open (fHandle, "+ <", $ path) 또는 죽는 "$!"; foreach $ line () \t \t {\t $ input = int (substr ($ line, 1, index ($ line, ",") - 1))); } 이것은 완전한 코드입니다. – fixxxer

+0

파일에서 예제 라인을 얻을 수 있을까요? 더 나은 방법으로 번호를 추출 할 수 있습니다. – slebetman

답변

17

그냥 사용하십시오. Perl에서 숫자처럼 보이는 문자열은 숫자입니다.

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! 
} 

당신이 남아 샘플 입력을 기반으로 : 당신이 그것을 사용 전에 것은 숫자 되어 있는지 확인하려면

이제 다음을 수행 Scalar::Util의 유틸리티 메소드가있다 코멘트 번호를 추출하는보다 강력한 방법은 다음과 같습니다

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

substr을 그대로 사용하면 다음과 같은 오류가 발생합니다. "1258200601.5027449"인수가 test.pl의 int가 아님 – fixxxer

+1

실제로 오류가 발생하면 숫자에 쉼표가 있기 때문에 숫자. – slebetman

+0

편집 : float를 원했기 때문에 int()가 제거되었습니다 ... @fixxxer : 죄송합니다. 예제에서 복사/붙여 넣기했습니다. – slebetman

1

나는 당신의 데이터가 어떻게 생겼는지 모르겠지만, 당신이 substr 세 번째 인수가 길이 아니라는 것을 깨닫게 않습니다 위치, 그렇지? 또한, 첫 번째 위치는 0입니다. 당신이 얻고 있다고 생각하는 데이터를 얻지 못했다고 생각합니다. 그리고 문자열의 시작 부분에서 시작하여 하나만 떨어져 있기 때문에 대부분 우연히 작동합니다.

+0

데이터는 "["로 시작합니다. 따라서 substr.Ofcourse의 두 번째 인수로 0이 아닌 1로 시작하는 것이 현명합니다. 세 번째 인수는 숫자 여야합니다. 코드에서 어떤 점을 생각하면 우리는 그것을 간과했다? – fixxxer

+1

index()는 당신이 그것을 간과했다고 생각하게 만들고 Perl이 숫자라고 생각하는 것을 추출하지 않는다고 생각합니다. 추측 할 필요가 없도록 입력 데이터를 포함한 완전한 예제를 보여주십시오. –

관련 문제