我一直试图找到一种很好的方法来解析经常查看的文本文件。问题不是解析简单的单行部分,而是解析多行并偶尔包含诸如:
之类的字符的部分。第二个问题是,在下一部分之前,偶尔会有一条随机行不能用作value:key对。
我的想法(尽管我还没有弄清楚如何编码),是由于SECTION值是已知的,因此可以在List<string>
中提供它们,这将允许解析过程通过一个节,直到到达另一个节为止。 List<string>
中的值。到目前为止,这就是我尝试使用的代码。
我需要帮助的主要是弄清楚多行问题,然后将所有内容存储在字典(List<Dictionary>
)列表中,以将每个部分存储在自己的字典中(或者,如果有人有更好的主意,则一定要这样做)。
示范文本:
Lorem ipsum dolor sit amet, consectetur adipisicing
elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut
enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut
aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in
voluptate velit esse cillum dolore eu fugiat nulla pariatur.
SECTION1
VALUE1: incididunt ut labore
VALUE2: nostrud
VALUE3: eiusmod tempor
VALUE4: Excepteur sint occaecat cupidatat non proident, sunt in
culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor
sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut
labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud
exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
VALUE5: Duis aute irure dolor in reprehenderit in voluptate
velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat
cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id
est laborum.
Lorem ipsum dolor sit amet, consectetur adipisicing
elit, sed do eiusmod tempor incididunt ut labore et dolore magna
aliqua.
SECTION2
VALUE1: incididunt ut labore
VALUE2: nostrud
VALUE3: eiusmod tempor
VALUE4: Excepteur sint occaecat cupidatat non proident, sunt in
culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor
sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut
labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud
exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
VALUE5: Duis aute irure dolor in reprehenderit in voluptate
velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat
cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id
est laborum.
样例代码:
bool Sec1 = false;
bool Sec2 = false;
for (int i = 0; i < lines.Length; i++)
{
if (lines[i].Equals("SECTION1") || Sec1 == true)
{
if (lines[i + 1].StartsWith(" "))
{
MessageBox.Show(lines[i + 1].Trim());
Sec1 = true;
}
else
{
Sec1 = false;
}
}
else if (lines[i].Equals("SECTION2") || Sec2 == true)
{
if (lines[i + 1].StartsWith(" "))
{
MessageBox.Show(lines[i + 1].Trim());
Sec2 = true;
}
else
{
Sec2 = false;
}
}
}
最佳答案
我认为这应该为您工作。至少它应该给你一个提示:
private void Parse()
{
var Dictionary = new List<List<string>>();
var Section = new List<string>();
using (var sr = new StreamReader(this.fileName))
{
while (sr.Peek() > -1)
{
var line = sr.ReadLine().Trim();
if (line.StartsWith("SECTION") && Section.Count > 0)
{
Dictionary.Add(Section); //// Store previous section
Section = new List<string>();
}
if (line.StartsWith("VALUE"))
{
line = line.Remove(0, line.IndexOf(' '));
Section.Add(line.Trim());
}
}
if (Section.Count > 0)
{
Dictionary.Add(Section); //// Store last section
}
}
}