나는 파일 (아래 전체 코드)을 읽음으로써 불쾌한 문자열에 문제를 고정 시켰습니다.
파일 s.tab이 18 진수 바이트 포함 : 그래서
b.Length=8 loop n=1, i=3, b=A??
?? B
stuck at i=3, b(i)=10 2573 3328...
done n=1, i=3, b=A??
?? B
: FF FE 41 00 0D 0A 00 0D 0A 00 0D 0A 여기에 42 00
00 내 프로그램에서 디버그 출력은 그것은 잘못된 유니 코드와 관련이 있습니다. i = 3 = IndexOf ("\ n \ n")에서 시작하는 문자열 b의 문자의 십진수 값을 출력했습니다. IndexOf는 10을 개행 문자 (OK)로 간주하고 2573 (0D 0A)을 다른 문자 (OK가 아닌)로 간주합니다. 그런 다음 교체가 동의하지 않습니다.
분명히 파일의 데이터에 문제가 있습니다. 그러나 나는 아직도 이것이 일어나야한다고 생각하지 않는다. IndexOf와 Replace는 동의해야합니다.
저는 msaeed의 솔루션을 구현하고 있습니다. 많은 감사합니다.
디버그 코드 :
{
System.IO.StreamReader aFile = System.IO.File.OpenText(@"c:\xfer\s.tab");
string a = aFile.ReadToEnd();
aFile.Close();
int nn=0, ii;
Console.WriteLine ("a.Length={0}", a.Length);
while ((ii=a.IndexOf("\n\n")) >= 0)
{
nn++;
Console.WriteLine("loop n={0}, i={1}, a={2}"
, nn
, ii
, a);
if (ii == a.IndexOf("\n\n"))
{
Console.WriteLine ("stuck at i={0}, a(i)={1} {2} {3}..."
, ii
, (int)(a.ToCharArray()[ii])
, (int)(a.ToCharArray()[ii+1])
, (int)(a.ToCharArray()[ii+2])
);
break;
}
a = a.Replace ("\n\n", "\n");
}
Console.WriteLine("done n={0}, i={1}, a={2}", nn, ii, a);
}
그것을 중지하지 않습니다 당신은 예를 들어 라인을 가지고 있습니까? 적 디버거로 침입 한 적이 있습니까[email protected] \t \t \t \t System.IO.StreamReader aFile 변수 = System.IO.File.OpenText (: –
내 대답은 여기에 무한 –
를 실행하려면이를 강제 한 경우 내가 무한 루프를 일으키는 불쾌한 문자열을 얻을 방법을 보여줍니다 "c : \ xfer \ s.tab"); \t \t \t \t 문자열 b = aFile.ReadToEnd(); \t \t \t \t aFile.Close(); 파일 s.tab이 18 진수 바이트 포함 FF FE 여기 내 프로그램으로부터 출력 0A 00 42 00 41 00 0D 0A 00 0D 0A 00 0D : 의 b.length = 8 루프 N = 1, i = 3, b = A ?? B i = 3, b (i) = 10 2573 3328 ... done n = 1, i = 3, b = A ?? ?? B 따라서 잘못된 유니 코드와 관련이 있습니다. 그러나 나는 아직도 그것이 일어나야한다고 생각하지 않는다. – Rob625