使用c#将文本文档划分为多个部分

时间:2011-11-18 21:14:11

标签: c# asp.net

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

 
=========================
       Head Text 1
=========================
      SubHead Text1
      SubHead Text2
=========================
 Content Text Line 1
 Content Text Line 2
 ...
 Content Text Line 8

=========================
       Head Text 2
=========================
      SubHead Text1
      SubHead Text2
=========================
 Content Text Line 1
 Content Text Line 2
 ...
 Content Text Line 6

我希望每个部分都在一个独特的对象中,每个部分有3个部分......有点像

section1.head
section1.subHead
section1.content

section2.head
section2.subHead
section2.content

我能想到完成此任务的唯一方法涉及很多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++;
}

1 个答案:

答案 0 :(得分:0)

如果要切断IF,可以实现将每一行提交到当前状态的状态模式。

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