사용

2011-08-15 6 views
1

가 나는 수치로 나오지도 명령으로 변환 할이사용

SKI 
SKII 
SKIII 
SKIV 
SKV 
SKVI 
SKVII 

같은 텍스트 파일 형식이 아라비아 숫자를 로마 숫자로 변환 나오지. 너 나 좀 도와 줄 수있어?

SK1 
SK2 
SK3 
SK4 
SK5 
SK6 
SK7 

감사합니다.

+0

쓰기 (/ 표절 도둑질) 작은 로마 숫자 변환 – KevinDTimm

+1

나오지 없음 코드,하지만 여기에 다른 예를 많이 : http://rosettacode.org/wiki/Roman_numerals/Decode –

답변

1

그렇게 할 사소한 방법은 없습니다. 무의미한 힘과 약간의주의가 필요합니다 :

sed -e 's/SKIII/SK3/' \ 
    -e 's/SKII/SK2/' \ 
    -e 's/SKIV/SK4/' \ 
    -e 's/SKVIII/SK8/' \ 
    -e 's/SKVII/SK7/' \ 
    -e 's/SKVI/SK6/' \ 
    -e 's/SKV/SK5/' \ 
    -e 's/SKI/SK1/' "[email protected]" 

더 긴 시퀀스는 일반적으로 더 짧은 시퀀스 앞에 와야합니다. 그리고 이것은 1-8을 다루기 만합니다; 그것을 일반화하는 것은 겸손하게 어렵다.


는 사실 숫자는 내가 해결할 수있는 방법 1 29까지 필요합니까? 같은 방법?

SK 접두어를 무시한 다음 약간주의해서 29 개의 별도 표현 -e을 사용할 필요는 없습니다. 물론 그래도 가능합니다. 이 스크립트는 39 (31 일 테스트, 한 달에 최대 일수)로 이동합니다. 99에 도달하는 데 필요한 확장은 상당히 명백합니다. (13 more -e 표현이라고 생각합니다.) 0을 포함하는 숫자에 대한 특별한 경우 처리에 유의하십시오.

sed \ 
    -e 's/IX/9/' \ 
    -e 's/XXX$/30/' \ 
    -e 's/XXX/3/' \ 
    -e 's/XX$/20/' \ 
    -e 's/XX/2/' \ 
    -e 's/X$/10/' \ 
    -e 's/X/1/' \ 
    -e 's/VIII/8/' \ 
    -e 's/VII/7/' \ 
    -e 's/III/3/' \ 
    -e 's/II/2/' \ 
    -e 's/IV/4/' \ 
    -e 's/VI/6/' \ 
    -e 's/V/5/' \ 
    -e 's/I/1/' "[email protected]" 
+0

실제로 숫자 1로 29. 어떻게 처리 할 수 ​​있습니까? 같은 방법? – Jianguo

+0

대체 문자열 끝에'$ '를 추가하면 순서가 필요하지 않습니다. – jfg956

+0

감사합니다. 정말 도움이됩니다! – Jianguo