2014-01-17 2 views
1

문자열을 숫자로 바꾸고 싶습니다. 예 (Windows의 한 줄)에 대한Perl 26자를 숫자로 대체하십시오.

는 :

perl -e "$_ = \"abcdefghijklmnopqrstuvwxyz\"; tr\a-z\1-9\;" 

결과는 다음과 같습니다

12345678999999999999999999 

이것은 내가 문자 난 후 숫자 기자를 할당하는 방법을 9까지 작동하지만? 내가 좋아하는 것
은 의미가 할당 내가 한 일 서명, 예를 들어

,

12 -> j, 13 -> k, etc. 

그것을 것 만드는 수치를 확인하기 위해 2 기호를 할당하는 방법을 알고

"1-", "2-", ... "25-", "26". 

답변

5
perl -E"$_ = 'abcdefghijklmnopqrstuvwxyz'; s/([a-z])/ord($1)-96/ge; say;" 

또는 5.14+

perl -E"say 'abcdefghijklmnopqrstuvwxyz' =~ s/([a-z])/ord($1)-96/ger;" 

이있는 경우 대신 ord($1) - 96의 규칙을 대체 할 수 있습니다.

+0

그게 전부 고마워. 나는 ord()를 몰랐다. 하이퐁에서 1-2-3-4 .....- 26-을 얻을 수 있습니까? – giordano

+0

@giordano's ///'의 두 번째 부분은 Perl 코드입니다. 그래서'(ord ($ 1) - 96). '-'. –

+0

감사합니다. 나는 그런 식으로 대괄호를 사용하는 것이 가능하다는 것을 몰랐다. 지금 나는 "단지 펄"로 무엇을 의미하는지 이해한다. 그것은 정규 표현식이 아니다. 고마워. – giordano

2

나는 불행하게도 tr///이 그것을 할 수 있다고 믿지 않는다 - 그것은 일대일 문자 치환이다. 그래서 먼 길을 가야 할 것입니다 :

my %indicies = map { $_ => (ord($_) - ord('a')) + 1 } ('a' .. 'z'); 
my $result = join '', map { $indicies{$_} } split(//, $string); 

불행히도 그것은 한 줄의 것이 아닙니다.

+0

정보 및 코드 주셔서 감사합니다. 유사한 문제에 도움이됩니다. – giordano