私は、ファイルを読み取ることによって得られる厄介な文字列に問題を突き止めました(以下の完全なコード)。
ファイルs.tabには、次の18の16進バイトが含まれています。FFFE 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の文字の10進値をi=3 = IndexOf( "\ n \ n")から出力しました。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);
}