2011-02-01 3 views
2

특정 "변수"를 "값"으로 바꾸어 문자열에 대해 Regex.Replace를 반복 실행합니다. 문제는, 일부는 대체되고 일부는 그렇지 않다는 것입니다!
정확한 배치 파일 (IBM JCL 배치 언어, 정확하게)을 분석하고 JCL 변수 (규칙 : JCL 변수가 "&"으로 시작하여 공백으로 끝나야 함), ";" "또는 다른 변수 시작, 그 "&"). 내 함수는 변수와 변수 및 값의 배열을 입력으로 사용하여 문자열을 가져와야합니다. 그런 다음. 자열을 검색하고 JCL 변수를 해당 값으로 Y 꾸십시오. 그래서 forcycle 및 배열의 ​​각 값 가변 구조체에 대해 "& TOSP."가 "& TO"로 잘못 배치되고 위의 내용을 참조하지 않도록 Regex.Replace 을 실행합니다.) :C# Regex.Replace (또는 String.Replace)는 부분적으로 만 작동합니다.

private string ReplaceDSNVarsWithValues(string _DSN,JCLvar[] VarsAndValues) 
{ 
//FIXME: nefunguje pro TIPfile a nebere všechny &var 
for(int Fa=0;Fa<VarsAndValues.Length/2;++Fa) 
{    
    _DSN = Regex.Replace(_DSN, "&"+VarsAndValues[Fa].JCLvariable+"[^A-Za-z0-9]", VarsAndValues[Fa].JCLvalue); 
} 
return _DSN; 
} 

예 : I는 대체 문자열로 이것을 가지고

string _DSN = "&TOSP..COPY.&SYSTEM..SP&APL..BVSIN.SAVEC.D&MES.&DEN..V&VER.K99"; 

및 I는 다음 예와 변수 값의 쌍을 포함하는 구조체의 배열을 갖는다.

JCLvar[1].variable = "APL",JCLvar[1].value = "PROD" 

그 결합과는 발생한다 "SP & APL." 부분이 "SPPROD"로 변경됩니다.

문제는 일부 변수 만 대체됩니다. & TOSP. .COPY. & SYSTEM..SP & APL..BVSIN.SAVEC.D & MES. 이러한가 작성되지 않습니다 - 그것은 (무시 & MES는 & DEN가 정상적으로 & DEN..V & VER.K99 SP.COPY.DBA0.SPPROD.BVSIN.SAVEC.D & MESDENV & VER.K99로 변경됩니다 ValsAnd Values ​​배열에 있으므로 대체되지 않음),
& TO.. @ ZDSK99.PODVYP.M & MES.U & DEN..SUC.RES, "& TO." 전혀 변경되지 않습니다 - 배열 및 디버깅을 통해 있지만 정규식으로 전달되는 것을 볼 수 있지만/그것은 변경되지 않습니다 /.

도대체 어떻게 되나요 일부 변수가 바뀌고 다른은 그렇지 않습니까? VarsAndValues ​​배열에서 변수의 순서는 중요합니다. "TOSP"가 먼저 나오면 "& TO"는 "TO"가 처음으로 바뀌고 "& TOSP"는 바뀌지 않으므로 대체됩니다. 따라서 Regex.Replace가 어떻게 든 동일한 문자열에서 동일한 표현식/변수를 반복적으로 대체하지 못하거나 OR 변수가 변경 될 것으로 인식하지 못한다는 의심이 들지만 첫 번째 가능성은 없으며 두 번째 것은 불가능한 것은 대체 된 표현이 분명히 거기에 머물러 있기 때문입니다. // 참고 - 확실하게 좋은 코딩이 아니라는 것을 알고 있습니다 만, 수작업으로 수 주일을 절약하기 위해 작성한 단일 목적의 스크립트입니다.

답변

2

정규식에 아무 것도 표시되지 않습니다. 하지만 왜 당신은 VarsAndValues의 절반 이상을 반복하고 있습니까?

for(int Fa=0;Fa<VarsAndValues.Length/2;++Fa) 

당신이 배열을 통해 중간 중지하고, 그래서 TOSP 하반기에 빠지게 발생의 경우는 교체되지 않습니다 알려줍니다.

+1

고마워, 지금은 작동합니다. (사실 2D 배열 [따라서 Lenght/2]에서 JCLvar 구조체로 되돌아 갔고 다른 증상을 생각할 때 나는이 남은 것을 깨닫기에는 너무 장님이었다. 나는 단지 독립적 인 코드 리뷰가 필요하다고 생각한다. 일) – cover72

관련 문제