2013-11-12 3 views
1

Я пытаюсь заполнить C# TreeView из вывода команды дерева DOS (tree/F/A> treeList.txt). Мне нужно определить уровень каждого узла в текстовом файле по строке и сохранить его как целое. Есть ли способ, которым это можно определить с помощью выражений Regex? Ниже приведен пример вывода команды Tree:Определить уровень узла в выводе команды дерева

Folder PATH listing 
Volume serial number is ****-**** 
C:. 
| info.txt 
| treeList.txt 
| 
+---Folder1 
| +---Sub1 
| | | info.txt 
| | | info2.txt 
| | | info3.txt 
| | | 
| | \---Sub 
| |  | info.txt 
| |  | 
| |  \---Sub 
| |    info.txt 
| |    info2.txt 
| |    
| +---Sub2 
| \---Sub3 
+---Folder2 
| | info.txt 
| | info2.txt 
| | 
| +---Sub1 
| |  info.txt 
| |  
| +---Sub2 
| +---Sub3 
| |  info.txt 
| |  
| \---Sub4 
+---Folder3 
| \---Sub1 
+---Folder4 
| +---Sub1 
| \---Sub2 
|   info.txt 
|   info2.txt 
|   
\---Folder5 
     info.txt 

Это пример вывода я пытаюсь достичь:

info.txt  0 
treeList.txt 0 
Folder1  0 
Sub1   1 
info.txt  2 
info2.txt 2 
info3.txt 2 
Sub   2 
info.txt  3 
Sub   3 
info.txt  4 
info2.txt 4 
Folder2  0 
And so on... 

Любая помощь или руководство высоко ценится.

ответ

1

Выражение используется для разделения текста на начало узла:

((?:[a-zA-Z0-9][+'-_()a-zA-Z0-9.]*)) 

Код, используемый для определения уровня Node:

List<TreeItem> items=new List<TreeItem>(); 

    int lineNum=0; 
    string line; 

    // Read the file 
    StreamReader file=new StreamReader("<Path>"); 

    while((line=file.ReadLine())!=null) { 
     string[] parts=Regex.Split(line,"((?:[a-zA-Z0-9][+'-_()a-zA-Z0-9.]*))"); 
     if(parts.Length>1) { 
      //Node level is determined by the number of characters preceding node text 
      items.Add(new TreeItem(parts[1],(parts[0].Length/4)-1)); 
     } 
     lineNum++; 
    } 

    file.Close(); 
1

У меня есть идея. Вы можете заменить в каждой строке строки дерева каждый особый характер дерева, заменив:

[|\\-\+] 

и после этого количества пробелов между началом строки и имя файла или папки. Количество пробелов скажет вам, насколько вы глубоко в lvl. Тогда вы также можете разделить количество пробелов на 3, и вы получите примерно несколько уровней. Что вы думаете?

+0

Спасибо за ответ. Тем не менее, я смог определить глубину, разделив каждую строку, где текст фактических узлов начинается с этого выражения: ((?: [A-zA-Z0-9] [+ '-_() a-zA-Z0-9 .] *)) – Ax1sMundi

+0

@AxisMundi Тем не менее, это похоже на одно и то же решение, но вы правы, что необходимо пересчитать все символы, деленные на 4 в строке перед файловым-текстовым узлом. Thx для ответа. –

Смежные вопросы