如何从文件中删除不需要的句子

时间:2015-12-01 18:24:08

标签: c# file filereader streamreader streamwriter

我试图从不同的本地文件中删除一些不需要的句子(在这种情况下,少于6个单词的句子),并将清理后的文本保存到另一组文件中。所以我试图逐个读取文件夹中的每个文件,并将所有有效的句子写入另一个文件夹中的另一组文件。我目前正在使用此代码:

int shortphrasescount = 0;    
var myUniquefilename = string.Format(@"{0}.txt", Guid.NewGuid()); 
string[] files = Directory.GetFiles(@"C:\input\")
                          .Where(p => p.EndsWith(".txt"))
                          .ToArray();
foreach (var file in files)
{

    StreamReader reader = new StreamReader(file);
    StreamWriter writer = new StreamWriter(@"C:\output\" + myUniquefilename);
    writer.Flush();

    var list = new List<string>();
    string line;
    while ((line = reader.ReadLine()) != null)
    {
        list.Add(line);
    }
    string[] sentences = list.ToArray();

    foreach (var sentence in sentences)
    {

        int NumberOfWords = sentence.Split(' ').Length;
        if (NumberOfWords < 6)
        {
            shortphrases += 1;
        }
        else
        {          
            writer.WriteLine(sentence);
        }
    }

    writer.Close();
    reader.Close();
}                    

Console.WriteLine("Deleted a total of " + shortphrasescount + " short phrases!");

但是这样我只设法保存最后处理过的文档,而不是将几个已清理的文本文件作为输出。我在这里做错了什么?

提前致谢。

4 个答案:

答案 0 :(得分:4)

创建StreamWriter对象以编写输出时,可以使用:

StreamWriter writer = new StreamWriter(@"C:\output\" + myUniquefilename);

其中myUniquefilenamestring = string.Format(@"{0}.txt", Guid.NewGuid());

问题是您每次都没有生成新的文件名。所以你用最后一个文件覆盖每个文件。您需要每次都生成一个新的文件名,可能会将赋值复制到循环中。

答案 1 :(得分:3)

您只在循环外部分配一次myUniqueFileaname。因此每次都会覆盖同一个文件。

答案 2 :(得分:3)

您可以在程序开头生成一次输出文件名。

显然,你需要为每个文件生成一次 - 所以移动代码

var myUniquefilename = string.Format(@"{0}.txt", Guid.NewGuid()); 

进入循环。

答案 3 :(得分:1)

这应该做你想要实现的目标

var myUniquefilename = @"C:\OutputDirectory\{0}_NEW.txt";
string[] files = Directory.GetFiles(@"C:\InputDirectory\", "*.txt");

foreach (var file in files)
{
    var lines = File.ReadAllLines(file);
    var validLines = lines.Where(l => l.Split(' ').Length > 6);
    File.WriteAllLines(string.Format(myUniquefilename, Path.GetFileNameWithoutExtension(file)), validLines);
}