1
私は与えられた場所のファイルのいくつかの文字列を数え、それらの値をいくつかのノードに入れようとしています。 私は以下のコードファイル内の文字列を数え、C#を使用して別の場所に値を入れますか?
var [email protected]"D:\Test\MyFiles";
var files = new List<string>();
if (Directory.Exists(workingPath))
{
foreach (var f in Directory.GetDirectories(workingPath, "xml",
SearchOption.AllDirectories))
{
files.AddRange(Directory.GetFiles(f, "*.xml"));
}
}
foreach (var file in files) {
string text = File.ReadAllText(file);
int fig_count = Regex.Matches(text, @"fig id=""fig").Count;
int tab_count = Regex.Matches(text, @"table-wrap id=""table").Count;
int eq_count = Regex.Matches(text, @"disp-formula id=""deqn").Count;
File.WriteAllText(file,Regex.Replace(File.ReadAllText(file), @"<fig-count count=""\d+""/>",@"<fig-count count="""[email protected]"""/>"));
File.WriteAllText(file,Regex.Replace(File.ReadAllText(file), @"<table-count count=""\d+""/>",@"<table-count count="""[email protected]"""/>"));
File.WriteAllText(file,Regex.Replace(File.ReadAllText(file), @"<eq-count count=""\d+""/>",@"<eq-count count="""[email protected]"""/>"));
}
コードの動作を試してみたが、それは少し冗長です。誰も私に冗長性を減らす方法を教えてもらえますか?
第二にコードレビューのための提案。しかし、最適化はファイルの大きさと一致する一致の数にも依存します。間違いなく、以下の1回だけ書くことをお勧めします。たくさんの小さなファイルがある場合は、Parallel.ForEachを調べてみてください。大量のファイルがあり、1つまたは2つの一致がある場合は、コードをさらに最適化する必要があります。 – NPras
コードのレビューではなく特定の質問のためのサイトですので、このトピックをオフトピックとして閉じるよう投票しています –