【问题标题】:Divide a Text Document into Sections using c#使用 c# 将文本文档分成多个部分
【发布时间】:2011-11-19 07:05:04
【问题描述】:

我正在解析一个具有半已知重复结构的文本文件。有一个标题(1 行)、一个子标题(1 行或 2 行)和一个内容区域(任意行数)。 文档中每一项的格式如下所示:

========================== 标题文字 1 ========================== 副标题文本1 副标题文本 2 ========================== 内容文本第 1 行 内容文本第 2 行 ... 内容文本第 8 行 ========================== 头部文字 2 ========================== 副标题文本1 副标题文本 2 ========================== 内容文本第 1 行 内容文本第 2 行 ... 内容文本第 6 行

我希望每个部分都在一个独特的对象内,每个部分都有 3 个部分......类似于

section1.head section1.subHead 第 1 节内容 section2.head section2.subHead section2.内容

我能想到的唯一方法是使用大量 ifwhile 语句。有没有一种有效的方法来做到这一点?

我最初尝试在 JScipt 中编写一些代码,但我正在读取一个 RTF 文件,而 C# 提供了一种将 RTF 转换为纯文本的简单方法。效果不是很好,我一直跳过一些分隔符,会在文件末尾出现错误。

page = new Array();

fso = new ActiveXObject("Scripting.FileSystemObject");
f = fso.GetFile("test.rtf");

is = f.OpenAsTextStream( forReading, -2 );

var count = 0;
while( !is.AtEndOfStream ){
   page[count] = is.ReadLine();
   count++; ;
}

is.Close();

WScript.Echo( page[0].text);

var item = [];

var section = 0;

var i = 0, k = 0;
while (i < page.length) {
item[k] = {};

    if (!page[i].indexOf("=====")) { 
        i++;    
        item[k].head = page[i];
        i+=2;
        while(page[i].indexOf("=====")) {   // WScript.Echo( "index = " + i + " "+ page[i] +"\n" + "Next index = " + (i+1) + " "+ page[i+1] +"\n" );
            item[k].subHead += page[i];
            i++;
        }

        k++;

    } 
    i++;
}

【问题讨论】:

  • 那么你尝试了什么?这是一个相对简单的基于行的处理问题。
  • 你能发布一些你已经尝试过的代码吗?
  • 我想出的东西看起来很丑,而且效果也不好。

标签: c# asp.net


【解决方案1】:

如果你想削减 IF,你可以实现一个状态模式,将每一行提交到当前状态。

http://en.wikipedia.org/wiki/State_pattern

【讨论】:

    猜你喜欢
    • 2023-03-03
    • 2020-05-04
    • 1970-01-01
    • 2016-07-12
    • 2018-12-03
    • 1970-01-01
    • 1970-01-01
    • 2012-11-10
    • 1970-01-01
    相关资源
    最近更新 更多