Читать все строки в строку [], пока не будет найден следующий знак
Я пытаюсь прочитать один текстовый файл (одна строка на запись, разделенная двумя "перечислениями", используемыми в качестве атрибута, см. Пример).
[enum1_0][enum2_0]
line
line
[enum1_0][enum2_1]
line
line
[enum1_1][enum2_0]
line
line
[enum1_1][enum2_1]
line
line
Я хочу создать string[][][]
который хранит все эти строки, так что позже я могу легко получить их, используя такой метод, но у меня много проблем с синтаксисом и с тем, как определить атрибуты знака в текстовом файле:
public static string GetRandomString(Enum1 e1, Enum2 e2)
{
return _strings[(int)e1][(int)e2][_random.Next(0, length)];
}
Чтобы уточнить: у меня есть текстовый файл, который имеет одну запись в каждой строке, где блоки строк разделены "[]"- отмеченные "знаки", которые соответствуют каждому индексу MyEnum1 и MyEnum2.
Я пытаюсь прочитать все строки в одну строку [], а затем отсортировать их в строку [][][], используя System.File.IO.ReadAllLines, чтобы позже я мог использовать свою функцию, показанную выше, чтобы получить их используя мои перечисления.
1 ответ
Итак, после некоторого сна я пересмотрел свою структуру, и вот мое решение:
static List<GovermentData> _data = new List<GovermentData>();
static string[] _all = File.ReadAllLines(@"Assets/Resources/" + PREFIXES_FILEPATH + ".txt");
static string[] _nations = File.ReadAllLines(@"Assets/Resources/" + NAMES_FILEPATH + ".txt");
public static void Initialize()
{
EconomicPolicy ep = EconomicPolicy.RadicalCollectivist;
TechLevel tl = TechLevel.Ancient;
//iterate all prefixes
for (int i = 0; i < _all.Length; i++)
{
if (_all[i].Length <= 0)
continue;
if(_all[i].StartsWith("["))
{
string s = _all[i];
//remove first [ and last ]
s = s.Remove(0, 1);
s = s.Remove(s.Length - 1, 1);
//split on ][
string[] r = s.Split(new string[] { "][" }, StringSplitOptions.None);
ep = (EconomicPolicy)Enum.Parse(typeof(EconomicPolicy), r[0]);
tl = (TechLevel)Enum.Parse(typeof(TechLevel), r[1]);
}
else
_data.Add(new GovermentData(_all[i], ep, tl));
}
}
public static string GetCivilisationName(EconomicPolicy ep, TechLevel t)
{
GovermentData[] gd = _data.FindAll(d => d.economicPolicy == ep && d.techLevel == t).ToArray();
if(gd.Length >= 1)
return gd[0].name + " of " + _nations[_random.Next(0, _nations.Length)];
else
return gd[_random.Next(0, gd.Length)].name + " of " + _nations[_random.Next(0, _nations.Length)];
}
public struct GovermentData
{
public readonly string name;
public readonly EconomicPolicy economicPolicy;
public readonly TechLevel techLevel;
public GovermentData(string name, EconomicPolicy economicPolicy, TechLevel techLevel)
{
this.name = name;
this.economicPolicy = economicPolicy;
this.techLevel = techLevel;
}
}
Спасибо за попытку помочь мне, несмотря на мое собственное замешательство.