我是C#的新手,我完全停留在解决问题的地方,我想使用递归,但是我尝试这样做却让我无处可寻。如何使用递归将文本解析为树结构?
我想有以下格式的文件阅读:
root:
fileA
sub1:
fileB
fileC
sub2:
fileD
fileE
fileF
fileG
sub3:
fileH
本质上说,结束冒号(行:)应该代表目录和不冒号结束线应该以代表他们的父目录文件,例如:的fileA和fileG属于在根目录,FILEB,fileC,并fileF位于子目录目录内,依此类推(位置由缩进/空格确定)。因此,我想读取这个文件,以及更复杂的文件,其结构类似于我目前正在做的(对于循环和if语句来说是一个可怕的混乱)。我为目录和文件使用简单的自定义类(我没有使用.NET类,除了StreamReader逐行读取文本文件)
我在python中做过类似的事情,但由于某种原因,我无法包装我的头在如何在C#中做到这一点,这是愚蠢的,因为这是一个抽象的问题,特定于语言的实现不应该太重要。我想,重要的是我缺乏对如何在这些情况下最好地应用递归的理解。我在正确的轨道上吗?我只是觉得有一种更加优雅的方式来解析这个文件到我自定义的类中(在示例文本中保留一个树结构),我认为递归是答案。我只是看不到它。
任何帮助,将不胜感激,即使它不是一个答案,更猛烈的推动在正确的方向。或轻轻推动。
示例代码在C#中尝试使用递归(不完整的,但我希望它得到跨什么,我试图做):
public void buildDirectoryFromFile(string file)
{
string line;
StreamReader data = new StreamReader(file);
int depth = 0;
while ((line = data.ReadLine()) != null)
{
depth = line.Length - line.TrimStart(' ').Length;
parseTextIntoTree(line, depth);
}
}
public void parseTextIntoTree(string line, int depth)
{
if (line.Contains(':'))
{
//Totally lost
}
else
{
//Totally lost
}
}
深度在这种情况下指的是空格/缩进。字符串和左边距之间的空间越多,它在树中的'越深'。
请向我们展示您已经编写的代码。如果你有它的话,那就是c#版本和python。它使我们的工作更容易帮助你。 – Enigmativity
请告诉我们你写的代码 –
我添加了一些代码,如果你的生活我可以更多地评论它。 @Enigmativity –