私はファイルを読むことによって(以下の完全なコード)、厄介な文字列に問題を固定しました。ここではFF FE 00 0D 0A 00 42 00
41 00 0D 0A 00 0D 0Aは私のプログラムのデバッグ出力です:
だから、
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
ファイルs.tabは、これらの18進のバイトが含まれていますそれは無効なユニコードと関係しています。私は文字列bの文字の小数点を、i = 3 = IndexOf( "\ n \ n")で始まります。 IndexOfは10を改行(OK)と見なし、2573(0D 0A)を別のもの(OKではない)と見なします。次に、Replaceは同意しません。
明らかにファイル内のデータに問題があります。しかし、私はまだこれが起こるとは思わない。 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);
}
あなたはそれが停止しない例ラインを持っていますか?デバッガで壊れたことはありますか?@ \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();ここで FF FE 41 00 0D 0A 00 0D 0A 00 0D 0A 00 42 00 私のプログラムから出力された: ファイルs.tabは、これらの18進バイトを含む て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