0

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

例子:

GE1:1

xxxxxxxxxxxxxxxxxxxxx

yyyyyyyyyyyyyy。

哈哈哈哈哈哈哈。

GE1:2

zzzzzzzzzzz

kkkkkkkkkkkkkkkkkkkkkkkkk

等等....

正如您在上面的示例中看到的,有些段落有 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 行的方法。我知道如何删除换行符等。只是不知道如何知道段落何时结束。

4

3 回答 3

1

将所有文本合并到一个字符串中

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

那 .Replace 是因为看起来您希望将新行替换为空格。

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

于 2012-10-29T05:46:43.893 回答
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);

从多行中制作单行

于 2012-10-29T05:43:38.737 回答
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();

(尚未测试。)

于 2012-10-29T05:57:18.970 回答