Я поставил проблему на неприятную строку, которую я получаю, читая файл (полный код ниже).
Файл s.tab содержит эти 18 шестнадцатеричных байт: FF FE 41 00 0D 0A 00 0D 0A 00 0D 0A 00 42 00
Вот отладочный вывод из моей программы:
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
Так это как-то связано с неправильным юникодом. Я напечатал десятичные значения символов строки b, начиная с i = 3 = IndexOf ("\ n \ n"). Кажется, что IndexOf видит 10 в качестве новой строки (ОК), а затем 2573 (то есть 0D 0A) как другой (не ОК?). Тогда Replace не соглашается.
Очевидно, что что-то не так с данными в файле. Но я до сих пор не думаю, что это должно произойти. IndexOf и Replace должны согласиться.
Я реализую решение msaeed. Большое спасибо.
код Debug:
{
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);
}
У вас есть пример строки, где он не останавливается? Когда-либо ворвался с отладчиком? –
Мой ответ показывает один случай, который заставит это бежать бесконечно –
Вот как я получаю неприятную строку, которая вызывает бесконечный цикл: \t \t \t \t System.IO.StreamReader AFile = System.IO.File.OpenText (@ "C: \ XFER \ s.tab"); \t \t \t \t string b = aFile.ReadToEnd(); \t \t \t \t aFile.Close(); Файл s.tab содержит эти 18 шестнадцатеричных байт: FF FE 41 00 0D 0A 00 00 0D 0A 0D 0A 00 42 00 здесь выход из моей программы: b.Length = 8 петли N = 1, i = 3, b = A ?? ?? B застрял в i = 3, b (i) = 10 2573 3328 ... сделано n = 1, i = 3, b = A ?? ?? B Так что это как-то связано с недействительным юникодом. Но я до сих пор не думаю, что это должно произойти. – Rob625