Я хотел бы проанализировать текстовый файл с несколькими десятками записей. Прямо сейчас, у меня есть упрощенный вниз решение, которое считывает построчно и сравнивает с жестко закодированными строками:C# Текстовый текстовый файл - поле класса доступа по индексу
while ((line = reader.ReadLine()) != null) //returns null if end of stream
{
cmpStr = "MODE";
try
{
if (line.Equals(cmpStr))
GlobalData.mode = Convert.ToInt32(line.Remove(0, cmpStr.Length));
}
catch { }
cmpStr = "TIME_YEAR";
try
{
if (line.Equals(cmpStr))
GlobalData.time_year = Convert.ToInt32(line.Remove(0, cmpStr.Length));
}
catch { }
// ... repeat to parse the remaining lines
}
GlobalData является статическим классом и выглядит следующим образом:
public static class GlobalData
{
public static int mode;
public static int time_year;
public static int time_month;
public static int time_day;
public static int time_hour;
public static int time_minute;
// other entries omitted
public static string[] GlobalKeywords = new string[37]
{
"MODE",
"TIME_YEAR",
"TIME_MONTH",
"TIME_DAY",
"TIME_HOUR",
"TIME_MINUTE",
// other entries omitted
};
}
Если бы это было можно получить доступ к своим статическим полям по индексу, я бы:
int i = 0;
while ((line = reader.ReadLine()) != null)
{
cmpStr = GlobalData.GlobalKeywords[i]; // when i == 0: cmpStr = "MODE"
if (line.Equals(cmpStr))
GlobalData[i] = Convert.ToInt32(line.Remove(0, cmpStr.Length));
// GlobalData[0] would be GlobalData.mode, and so on (but doesn't work)
i++;
}
catch { }
Так что, даже если я могу настроить цикл для сравнения массива строк ключевых слов, Как назначить определенное поле моего статического класса?
уш Крис
Я не уверены, как GlobalData [i] будет GlobalData.mode. – srsyogesh
Можете ли вы показать пример того, как отформатирован ваш входной файл? – Steve
Вы правы, этого не было. Это файл .txt, где каждая запись находится в одной строке, а строки разделены CR + LF (Windows Linefeed). Например, файл может выглядеть так: MODE 5 TIME_YEAR 2013 TIME_MONTH 10 и т. Д. –
user2286339