我想搜索多个文本文件中的单词列表,并计算包含单词的文件数。
我的代码需要很长时间才能达到数小时。
uniqword = File.ReadAllLines(@"H:\\backstage\my work\uniqword.txt").ToList();
string[] allfile = Directory.GetFiles(@"H:\\backstage\my work\categories file text\categories", "*.txt");
var no_doc_word = new Dictionary<string, int>();
foreach (string ff1 in allfile)// read one file in files until finish
{
List<string> allLinesText = File.ReadAllLines(ff1).ToList();
foreach (string word in uniqword)
{
if (allLinesText.Contains(word))
if (no_doc_word.ContainsKey(word))
no_doc_word[word]++;
else
no_doc_word.Add(word, 1);
}
}
答案 0 :(得分:1)
您可以在阅读文件时检查单词并计算它们:
async Task Contains(string file)
{
using ( StreamReader reader = new StreamReader(File.OpenRead(file))
{
string line = string.Empty;
while( (line = reader.ReadLine()) != null)
{
string[] words = line.Split(new char[] { ' ', ',', '.' });
foreach(string word in uniqword)
{
int howMany = words.Count(w => w.Equals(word);
if (no_doc_word.ContainsKey(word))
no_doc_word[word] += howMany;
else
no_doc_word.Add(word, howMany);
}
}
}
}
由于这是异步的,你甚至可以多次调用它:
public void Check()
{
string[] files = new string[] { @"C:\file1.txt", @"C:\file2.txt" };
List<Task> tasks = new List<Task>();
foreach(string file in files)
tasks.Add(Contains(file));
Task.WaitAll(tasks.ToArray());
}
编辑:
使用此方法的好处是所有文件(或几乎所有文件)都在同一时间处理。
答案 1 :(得分:0)
根据实际的瓶颈情况,可以做到这一点很简单(评论中的解释):
<select id="btn1">
<option>Export</option>
<option id="csv" data>CSV</option>
<option id="xls" >XLS</option>
</select>