아래 예제에서 str1이 str2와 같으면 모든 경우를 무시하려고합니다. 즉 str1 eq str2입니다. 아래는 내가 직면 한 문제입니다.Perl이 문자열/부동 소수점 숫자에서 자르는 0을 제거합니다.
1 케이스 : STR1 = '{V1 0.85} STR2 ='{V1 0.850000}
case2 : STR1 = '{V1 0.65} {오프 V2} {V_3 1.1} STR2 = '{V1 0.650000} {오프 V2} {V_3 1.100000}
case3 : STR1 ='{V2 0.0} {V3 2.0} {V4 ON} STR2 = '{V2 0.0000000} {V3 2.000000} { V4 ON} '
위의 각 예제는 후행 0이 제거되면 str1 = str2 조건을 만족해야합니다 문자열.
현재이 내가 사용하고있는 정규식 :
$str2 =~ s/\.?0*}/\}/;
하지만 일부 경우에 작동합니다. 예는 1 {에 0을 제거 위의 경우 2}하지만 2 세트
는 전에 즉 : str1이 '{v_0p65 0.65} {vout_off 오프} {v_1p1 1.1}'
후입니다 사용하는 정규식은 '{v_0p65 0.65} {vout_off 오프} {1.100000 v_1p1}'
코드는 다음과 같은 것입니다 (하나 개의 작은 조각을 붙여 너무 복잡) : str1과 str2와는 수신이 해시의 정확한 출력은 반복적으로 코드는 간단하게
입니다. 공간과} 끝에 (단지 소수점 앞에 0을 포함하지 않음) 소수점 앞에 선행 0 및 후행 0을 제거 사이의 영어if ($str1 eq $str2) {
#Don't do anything
else {
print ("str1 and str2 are not equal\n");
}
사용중인 실제 코드를 포함 할 수 있습니까? –
위에 추가되었습니다. 여러 개의 입력 파일이 필요한 매우 복잡한 코드. 그러나이 부분과 정확히 똑같습니다. str2를 str1로 변환하는 정규식을 꽤 많이 필요합니다. – Rancho
_actual_ 코드를 게시하지 않으면 _actual_ 솔루션을 제공 할 수 없습니다. 현재'if' 문 데모 코드는 $ str1이 $ str2와 같으면 순전히 매치 할 것이고 일치하지 않으면 아무것도하지 않을 것입니다. 어쨌든'better ($ str1 eq $ str2) {print ...; ' –