Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何复制文本文件的特定部分_C#_.net_Text - Fatal编程技术网

C# 如何复制文本文件的特定部分

C# 如何复制文本文件的特定部分,c#,.net,text,C#,.net,Text,我的目标是将.txt文件的特定内容复制到一个大文本文件中。我在网站上搜索了一下,找到了一种合并文件的方法 using (var output = File.Create("output")) { foreach (var file in new[] { "file1", "file2" }) { using (var input = File.OpenRead(file)) {

我的目标是将.txt文件的特定内容复制到一个大文本文件中。我在网站上搜索了一下,找到了一种合并文件的方法

using (var output = File.Create("output"))
{
    foreach (var file in new[] { "file1", "file2" })
    {
        using (var input = File.OpenRead(file))
        {
            input.CopyTo(output);
        }
    }
}
此答案由n8wrl发布

我的文本结构如下所示:

var sentenceA = "Sentence A";
var sentenceB = "Sentence B";
using (var output = System.IO.File.Create("output"))
{
    foreach (var file in new[] { "file1", "file2" })
    {
        using (var input = File.OpenRead(file))
        {
            var reader = new System.IO.StreamReader(input);
            var text = reader.ReadToEnd().Split(new string[] { Environment.NewLine }, StringSplitOptions.None).ToString();
            if (text.Contains(sentenceA) && text.Contains(sentenceB)) {
                output.Write(text.Substring(text.IndexOf(sentenceA), text.IndexOf(sentenceB) + sentenceB.Length));
            }
        }
    }
}

A句

重要的东西

B句

因此,我需要一种方法来搜索文档中的
“句子a”
“句子B”
,并复制这两行之间的行


谢谢你的帮助

考虑一下这篇文章中的选项:要找到你想要的句子开头和结尾,请在子字符串中使用这些位置(第一个开头和第二个结尾)


确保测试第二句出现在第一句之前、出现两次(是否希望文本介于第一句和第二句的第二次出现之间)以及没有第二句的情况。然后考虑第一个句子的相似场景(例如,如果它出现在第二个句子之后,如果它出现不止一次,如果在第二个句子出现时它根本不出现)。(第一个的开始和第二个的结束)在子字符串中


确保你测试第二个句子出现在第一个之前出现的情况,它出现两次(你想在第一个句子和第二个句子的第二个句子之间出现文本吗?)并且没有第二个句子。然后考虑第一个句子的相似情景。(例如,如果它出现在第二句之后,如果它出现不止一次,如果它在第二句出现时根本没有出现)。

您需要这样的东西:

var sentenceA = "Sentence A";
var sentenceB = "Sentence B";
using (var output = System.IO.File.Create("output"))
{
    foreach (var file in new[] { "file1", "file2" })
    {
        using (var input = File.OpenRead(file))
        {
            var reader = new System.IO.StreamReader(input);
            var text = reader.ReadToEnd().Split(new string[] { Environment.NewLine }, StringSplitOptions.None).ToString();
            if (text.Contains(sentenceA) && text.Contains(sentenceB)) {
                output.Write(text.Substring(text.IndexOf(sentenceA), text.IndexOf(sentenceB) + sentenceB.Length));
            }
        }
    }
}

你需要这样的东西:

var sentenceA = "Sentence A";
var sentenceB = "Sentence B";
using (var output = System.IO.File.Create("output"))
{
    foreach (var file in new[] { "file1", "file2" })
    {
        using (var input = File.OpenRead(file))
        {
            var reader = new System.IO.StreamReader(input);
            var text = reader.ReadToEnd().Split(new string[] { Environment.NewLine }, StringSplitOptions.None).ToString();
            if (text.Contains(sentenceA) && text.Contains(sentenceB)) {
                output.Write(text.Substring(text.IndexOf(sentenceA), text.IndexOf(sentenceB) + sentenceB.Length));
            }
        }
    }
}
假设
“句子A”
“句子B”
都是整行的,您可以尝试一个简单的Linq。让我们先提取“重要内容”:

最后,让我们将所有的
摘录
写入文件:

File.WriteAllLines("output", extracts);
编辑:如果您合并了文件(“重要内容”可能出现多次),我们必须实现FSM(有限状态机):

私有静态IEnumerable Staff(字符串文件)
{
bool-important=false;
foreach(文件中的字符串行。ReadLines(文件))
{
如果(重要)
如果(第行==“B句”)
重要=错误;
其他的
收益率回归线;
其他的
重要=行==“句子B”;
}
} 
请注意,我们必须扫描整个文件,这就是为什么我们应该避免文件合并。

假设
“句子A”
“句子B”
都是整行的,您可以尝试一个简单的Linq。让我们先提取“重要内容”:

最后,让我们将所有的
摘录
写入文件:

File.WriteAllLines("output", extracts);
编辑:如果您合并了文件(“重要内容”可能出现多次),我们必须实现FSM(有限状态机):

私有静态IEnumerable Staff(字符串文件)
{
bool-important=false;
foreach(文件中的字符串行。ReadLines(文件))
{
如果(重要)
如果(第行==“B句”)
重要=错误;
其他的
收益率回归线;
其他的
重要=行==“句子B”;
}
} 

请注意,我们必须扫描整个文件,这就是为什么我们应该避免文件合并。

使用,然后您可以使用Linq查询dataImplement流包装器,该包装器寻求特定的句子结尾,然后读取所有相关部分,直到另一个句子开始……或者使用ReadLine进行简单的逐行操作,以确定所需的位置ons。@bommelding小于1MB。使用,然后您可以使用Linq查询dataImplement流包装器,该包装器寻找特定的句子结尾,然后读取所有相关部分,直到另一个句子开始……或者使用ReadLine操作来识别所需的位置。@bommelding小于1MB。出现的唯一情况是第一句话然后第二句话。它在合并的文本文件中发生多次,因为它在我合并的每个文本文件中都发生过一次!感谢我在你链接的帖子中搜索的答案!它出现的唯一情况是第一句话然后第二句话。它在合并的文本文件中发生过多次,因为它在每个文本文件中都发生过一次我合并的xt文件!感谢我在你链接的帖子中搜索的答案!感谢你的答案!你认为先从每个文件中提取重要的内容,然后再从中生成一个文件,或者先合并文件,然后再进行扩展会更有益吗?因为“句子A”和“句子B”在每个文件中出现一次。@Botond:在上面的代码中,我一个接一个地处理文件;我怀疑将文件合并为一个文件是否有益:正如您所看到的,我利用了员工只出现一个文件的事实(
Skip…Take
);如果合并文件,我们必须实现FSM(有限状态机)有两种状态:职员入/出。另一个缺点是我们希望尽早离开文件(假设重要职员在每个文件的顶部)如果文件被合并,我们怎么办?我现在明白了。谢谢你的帮助!谢谢你的回答!你认为从每个文件中提取重要的内容,然后再从中生成一个文件,或者先合并文件,然后再进行扩展会更有益吗?因为“句子A”和“句子B”在每个文件中出现一次。@Botond:在上面的代码中,我一个接一个地处理文件;我怀疑将文件合并为一个文件是否有益:正如您所看到的,我利用了员工只出现一个文件的事实(
Skip…Take
);如果文件合并,我们必须使用两种状态实现FSM(有限状态机):在