2012-10-29 79 views
-1

我已经搜索过,但没有找到任何具体解决此问题的东西:所以在这里 - 我有一个文本文件,段落中有文本行以“返回”。所以它在单独的行上结束 - 我想将这些多行合并成一行。 我在C#中使用Streamreader(VS 2010)。在C#中使用Streamreader合并多行到一行

实施例:

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. 

UPDATE: 我需要的是检测一款拥有3线或两个的方法。 我知道如何删除换行符等。只是不能解决如何知道段落何时结束。

+0

是你的工作? –

+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); 

使单行出的多条线路

0

将所有文本转换成一个字符串

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

这就是因为它看起来像你希望你的新行被替换为空格。

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

+0

谢谢马特。但我相信REadAllText会读取整个文件 - 约30,000段。我需要阅读每个段落并转换为单行。 – dezkev

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(); 

(还没看还没有测试)

+0

这会对整个文件进行操作还是自行检测段落的结尾? – dezkev

+0

当然会。 – AgentFire