using System.Collections.Generic;
using System.Collections.Specialized;
using System.IO;
using System.Linq;
namespace ConsoleApplication16
{
class Program
{
static void Main(string[] args)
{
Dictionary<string, Dictionary<string, StringCollection>> data = ReadFromFile("test.txt");
data["v2_10_0"].Add("v2_10_0_8", new StringCollection());
data["v2_10_0"]["v2_10_0_8"].Add("TESTING 4");
data["v2_10_0"]["v2_10_0_8"].Add("TESTING 5");
data.Add("v3_10_0", new Dictionary<string, StringCollection>());
data["v3_10_0"].Add("v3_10_0_1", new StringCollection());
data["v3_10_0"]["v3_10_0_1"].Add("TESTING 1");
data["v3_10_0"]["v3_10_0_1"].Add("TESTING 2");
WriteToFile("test.txt", data);
}
static void WriteToFile(string filePath, Dictionary<string, Dictionary<string, StringCollection>> data)
{
using (StreamWriter writer = new StreamWriter(filePath))
{
foreach (var outerKey in data.Keys)
{
writer.WriteLine(string.Format("Begin Folder = \"{0}\"", outerKey));
foreach (var innerKey in data[outerKey].Keys)
{
writer.WriteLine(string.Format("\tBegin Folder = \"{0}\"", innerKey));
foreach (var item in data[outerKey][innerKey])
{
writer.WriteLine(string.Format("\t\tScript = \"{0}\"", item));
}
writer.WriteLine("\tEnd");
}
writer.WriteLine("End");
}
}
}
static Dictionary<string, Dictionary<string, StringCollection>> ReadFromFile(string filePath)
{
Dictionary<string, Dictionary<string, StringCollection>> result = new Dictionary<string, Dictionary<string, StringCollection>>();
using (StreamReader reader = new StreamReader(filePath))
{
bool foundOuterBegin = false, foundInnerBegin = false;
string currentOuter = string.Empty, currentInner = string.Empty;
while (!reader.EndOfStream)
{
string line = reader.ReadLine().Trim();
string value;
if (line.IndexOf('=') >= 0)
{
value = line.Substring(line.IndexOf('=') + 1).Trim(new char[] { '"', ' ' });
}
else
{
value = line;
}
if (line.ToLower().StartsWith("begin"))
{
if (foundOuterBegin)
{
foundInnerBegin = true;
currentInner = value;
result[currentOuter].Add(currentInner, new StringCollection());
}
else
{
foundOuterBegin = true;
currentOuter = value;
if (!result.Keys.Contains(currentOuter))
{
result.Add(currentOuter, new Dictionary<string, StringCollection>());
}
}
}
else if (line.ToLower().StartsWith("end"))
{
if (foundInnerBegin)
{
foundInnerBegin = false;
}
else if (foundOuterBegin)
{
foundOuterBegin = false;
}
}
else if (line.ToLower().StartsWith("script"))
{
if (foundOuterBegin && foundInnerBegin)
{
result[currentOuter][currentInner].Add(value);
}
}
}
}
return result;
}
}
}
data["v2_10_0"]["v2_10_0_1
data["v2_10_0"]["v2_10_0_1
data["v2_10_0"]["v2_10_0_1
etc.
Open in new window