Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.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# 阅读txt中的段落。文件,分成句子,并打印到新的txt。用c语言归档#_C#_Split_Readfile - Fatal编程技术网

C# 阅读txt中的段落。文件,分成句子,并打印到新的txt。用c语言归档#

C# 阅读txt中的段落。文件,分成句子,并打印到新的txt。用c语言归档#,c#,split,readfile,C#,Split,Readfile,我正在尝试编写c#代码,在其中我应该阅读txt中的一段。归档,然后拆分所有句子。然后,我应该把所有的句子打印成一个新的文本。文件,它们仍然必须有所有的周期,并且必须完全对齐。例如,如果段落为:这是第一句话。这是第二句话。这是第三句话。,那么输出(在新的txt.文件中)应该是: 这是第一句话 这是第二句话 这是第三句话 我写了一些代码,看起来一切都正常,除了结尾有一个空行,我认为不应该在那里,因为我检查了空行。这是我的密码: using System; using static Syste

我正在尝试编写c#代码,在其中我应该阅读txt中的一段。归档,然后拆分所有句子。然后,我应该把所有的句子打印成一个新的文本。文件,它们仍然必须有所有的周期,并且必须完全对齐。例如,如果段落为:这是第一句话。这是第二句话。这是第三句话。,那么输出(在新的txt.文件中)应该是:

这是第一句话

这是第二句话

这是第三句话

我写了一些代码,看起来一切都正常,除了结尾有一个空行,我认为不应该在那里,因为我检查了空行。这是我的密码:

  using System;
  using static System.Console;
  using System.IO;

 class Test
{
    public static void Main()
    {

        // Open the text file using a stream reader.
        using (StreamReader sr = new StreamReader("a.txt"))
        {

            // Read the stream to a string, and write the string to the console.
        String line = sr.ReadToEnd();

        string[] sentences = line.Split('.');

        using (StreamWriter newFile = new StreamWriter("b.txt"))

            for (int i = 0; i < sentences.Length; i++)
            {
                if (sentences[i].Length != 0)
                {
                    string outString = sentences[i].Trim() + ".";
                    newFile.WriteLine(outString);
                    WriteLine(outString);


                }
            }

        }

    }
}
使用系统;
使用静态系统控制台;
使用System.IO;
课堂测试
{
公共静态void Main()
{
//使用流读取器打开文本文件。
使用(StreamReader sr=新StreamReader(“a.txt”))
{
//将流读取为字符串,然后将字符串写入控制台。
字符串行=sr.ReadToEnd();
string[]句=line.Split('.');
使用(StreamWriter newFile=newstreamwriter(“b.txt”))
for(int i=0;i<句长;i++)
{
if(句子[i]。长度!=0)
{
string outString=句子[i].Trim()+“;
newFile.WriteLine(outString);
写线(突出);
}
}
}
}
}
我在这里得到的结果是:

这是第一句话

这是第二句话

这是第三句话

[空行]

我不知道为什么我的文本末尾有一个空格。文件任何帮助都将不胜感激


非常感谢。

您是否尝试调试此程序以查看
字符串[]语句所包含的内容?每个句子都有一个句点,然后你将其拆分,这样你就可以得到一个由4行组成的数组:

这是第一句话 这是第二句话 这是第三句话 四,

然后你在每个周期的末尾加上一个周期,这就是为什么你会得到额外的周期

您可以尝试在每个句子上添加string.IsNullOrEmpty检查以及.Trim()以清除空白

foreach (string sentence in sentences)
{
   if (!string.IsNullOrEmpty(sentence))
       Console.WriteLine(sentence.Trim() + ".");
}

据我所知,你想知道:

  • 为什么句子之间有空格

  • 为什么结尾有两个点

  • 使用方法
    Split(string-str)
    时,拆分中包含空格。如果你看一下你的例子,实际上句子之间有一些空格,所以它不会删除它们


    关于问题#2,你在每个句子上加了一个点,因为分割法消除了它们。示例文件末尾必须有一个空格,如下所示:
    这是第三句话。[此处空格]
    。Split将在数组中放置第三个句子和点后的空格。当然
    newFile.WriteLine(句子+)在每个句子的末尾加一个点,这样它就占据了隐藏的空间,并在它的末尾加一个点。您可以使用方法
    yourString.Trim()
    删除字符串前后的所有空格。

    因为句点后的第一个字符是空格。这是真的问题还是家庭作业?我问这个问题是因为句子解析非常困难,最好还是让斯坦福NLP或Azure文本分析之类的工具来完成。你应该在拆分之前清理段落:删除前导和结尾空格,空格和句点。您可以使用regex.replace和如下模式:^\s+作为前导空格,替换为“”\s+\。\s+表示小括号周围的空格替换为“”,\s+$表示尾部空格替换为“”。在那之后,确保查看StringSplitOptions以忽略空句子,您应该被设置好!在手机上写信,对不起,我帮不上什么忙。在我之前的评论中,将我提到的“空格”替换为“空白”\s匹配大多数空白字符。也许某些控制字符仍然可以通过,您需要进行测试。手机出了点问题我怀疑是一个错误的引号字符,但你会明白的!这消除了空校验的必要性啊,这很有效,非常感谢!!我现在唯一的问题是,它在文本文件的末尾添加了一个额外的空行,我似乎无法摆脱它:(我不确定我是否理解您的新问题,您能添加更多解释吗?很抱歉造成混淆--在我的代码编写的新txt.文件中,它写了以下内容:这是第一句话。这是第二句话。这是第三句话。[空行]我只是想去掉最后插入的空白行,但我不能这么做。请通过编辑您的问题来张贴您的更新代码。如果您正在执行空或空检查,它不应该写空行。