У меня, похоже, проблема со следующим файлом:
*User Type 0: Database Administrator
Users of this Type:
Database Administrator DBA Can Authorise:Y Administrator:Y
DM3 Admin Account DM3 Can Authorise:Y Administrator:Y
Permissions for these users:
Data - Currencies Parameters - Database Add FRA Deal Reports - Confirmation Production
Add Currency Amend Database Parameters Cancel FRA Deal Reports - System Printer Definitions
Delete Currency Parameters - Data Retention Amend FRA Deal Save System Printers
Amend Currency Amend Data Retention Parameters Amend Settlements Only Custom Confs/Tickets
Amend Currency Rates Data - Rate References Verify FRA Deal Add Custom Confs/Tickets
Amend Currency Holidays Add Rate Reference Add FRA Deal (Restricted) Delete Custom Confs/Tickets
Add Nostro Delete Rate Reference Release FRA Deal Amend Custom Confs/Tickets
Amend Nostro Amend Rate Reference Deal - IRS Reports - System Report Batches
Delete Nostro Deal - Call Accounts Add IRS Deal Save System Batches
Data - Currency Pairs Open Call Account Cancel IRS Deal Reports - View Reports Spooled
Add Currency Pair Amend Call Account Amend IRS Deal View - Audits
Delete Currency Pair Close Call Account Amend Settlements Only Print Audit
Amend Currency Pair Amend Settlements Only Verify IRS Deal Print Audit Detail
Data - Books Data - Sales Relationship Mgrs Add IRS Deal (Restricted) Filter Audit*
Я использую регулярное выражение для проверки каждой строки на наличие шаблона.Всего есть три модели, которые должны соответствовать.Если вы посмотрите на первые три строки, это вся информация, которая должна быть взята из файла.У меня проблема в том, что мое регулярное выражение не соответствует.Кроме того, что нужно сделать, это информация должна быть взята между двух строк .... Как я могу это сделать?
Это код, который у меня есть на данный момент:
string path = @"C:/User Permissions.txt";
string t = File.ReadAllText(path);
//Uses regular expression check to match the specified string pattern
string pattern1 = @"User Type ";
string pattern2 = @"Users of this Type:";
string pattern3 = @"Permissions for these users:";
Regex rgx1 = new Regex(pattern1);
Regex rgx2 = new Regex(pattern2);
Regex rgx3 = new Regex(pattern3);
MatchCollection matches = rgx1.Matches(t);
List<string[]> test = new List<string[]>();
foreach (var match in matches)
{
string[] newString = match.ToString().Split(new string[] { @"User Type ", }, StringSplitOptions.RemoveEmptyEntries);
for (int i = 3; i <= newString.Length; i++)
{
test.Add(new string[] { newString[0], newString[1], newString[i - 1] });
}
}
MatchCollection matches2 = rgx2.Matches(t);
List<string[]> test2 = new List<string[]>();
foreach (var match2 in matches2)
{
string[] newString = match2.ToString().Split(new string[] { @"Permissions for these users: ", }, StringSplitOptions.RemoveEmptyEntries);
for (int i = 3; i <= newString.Length; i++)
{
test2.Add(new string[] { newString[0], newString[1], newString[i - 1] });
}
}
MatchCollection matches3 = rgx3.Matches(t);
List<string[]> test3 = new List<string[]>();
foreach (var match3 in matches3)
{
string[] newString = match3.ToString().Split(new string[] { @"Users of this Type: ", }, StringSplitOptions.RemoveEmptyEntries);
for (int i = 3; i <= newString.Length; i++)
{
test3.Add(new string[] { newString[0], newString[1], newString[i - 1] });
}
}
foreach (var line in test)
{
Console.WriteLine(line[0]);
Console.ReadLine();
}
Console.ReadLine();
Код Guffa кажется очень эффективным по сравнению с моим, единственная проблема, с которой я сейчас сталкиваюсь, заключается в том, как извлечь строки между пользователямиэтого типа "и разрешения для этих пользователей". Как бы это сделать? Очевидно, проверка, чтобы узнать, начинается ли имя в новой строке, не поможет.