在C#中使用Streamreader将多行合并为一行

时间:2012-10-29 05:36:15

标签: c# text-files streamreader

我搜索了SO,但没有找到任何专门解决此问题的内容:所以这里 - 我有一个文本文件,其中段落的文本行以“return”结尾。所以它最终分成几行 - 我想将这些多行合并为一行。 我在C#中使用Streamreader(VS 2010)。

  

示例:

     

GE1:1

     

xxxxxxxxxxxxxxxxxxxxx

     

yyyyyyyyyyyyyy。

     

hhhhhhhhhhhhh。

     

GE1:2

     

zzzzzzzzzzz

     

kkkkkkkkkkkkkkkkkkkkkkk

     

依旧......

正如你在上面的例子中看到的,一些段落有3行,有些段落有两行。它有所不同。 文本文件中有数千个这样的段落。

基本上我想让我的变量“templine”包含以下内容:(将用于进一步处理)。

var templine = "xxxxxxxxxxxxxxxxxxxxx yyyyyyyyyyyyyy. hhhhhhhhhhhhh."

代码:

     using (StreamReader sr = new StreamReader(@"C:\Test.txt"))
        using(StreamWriter sw = new StreamWriter(@"C:\Test2.txt"))
        {
            StringBuilder sb    = new StringBuilder ( );


            while (!sr.EndOfStream)
            {
                    string templine = sr.ReadLine();  /// further processing code not relevant.

更新: 我需要的是一种检测段落是否有3行或2行的方法。 我知道如何删除Newline字符等。只是不知道如何知道段落何时结束。

3 个答案:

答案 0 :(得分:0)

您可以从字符串中删除新的行字符

string replacement = Regex.Replace(templine  , @"\t|\n|\r", "");

templine  = templine.Replace("\n", String.Empty);
templine  = templine.Replace("\r", String.Empty);
templine = templine.Replace("\t", String.Empty);

从多行中制作单行

答案 1 :(得分:0)

将所有文字带入单个字符串

var templine = File.ReadAllText(@"c:\temp.txt").Replace(Environment.NewLine, " ");

那.Replace是因为看起来你想要用空格替换你的新行。

如果你想把它分成2或3行段落,你需要为我们指定分隔符是什么。

答案 2 :(得分:0)

您可以使用正则表达式。

Regex parser = new Regex(@"GE\d*\:\d*\r\n(?<lines>(.*?\r\n){2,3})",
    RegexOptions.Singleline);

然后得到你所需要的一切:

string[] paragraphs = parser.Matches.Cast<Match>().Select(T =>
    Regex.Replace(T.Groups["lines"].Value, @"\t|\n|\r", string.Empty)).ToArray();

(尚未测试。)