我想分割/分组此文字:
[Help]
Group0
[Help Op]
Group1
[Help Mod]
Group2
[Help Member]
Group3
[Help Default]
Group4
我怎么能这样做? 所以喜欢
字符串op等于Group1,或者标签[Help OP]
下面的任何文本与其他'标签'相同,如字符串默认值等于'group4'
或者即使有更好的方法来解决这个问题,例如xml或其他任何内容。
答案 0 :(得分:2)
如果使用xml文件,则可以利用LINQ-TO-XML来处理解析操作。如果您使用像ini文件或自定义版本这样的东西,则必须编写自己的解析代码。不是非常艰难,但是额外的工作。如果您不介意使用尖括号税,请查看LINQ-TO-XML。 Here是一个可以帮助您入门的教程。
注意:我假设你正在使用.Net 3.5或更高版本。如果不是这样,那么使用XML会有更多的工作。
更新:
如果你更倾向于ini方法,你的文件将如下所示:
[说明]
OP =组别1
国防部=第2组
会员=组3
默认=组别4
[其他部分]
someKey = someValue中
等
我有一个简单的库,我可以通过ini文件解析,读取键和值,写入键和值以及保存ini文件更改(通过覆盖或保存到新文件到同一位置) )。代码太大了,不能在这里发布,但我总是可以把它扔到某个地方,并给它一个链接。
要查找值,它将类似于以下内容:
var ini = new IniFile(fileName);
string myValue;
// look up section Help, key Op
if (ini.TryGetValue("Help", "Op", out myValue))
{
// do something with myValue, which would contain "Group1"
}
// if the result was false, it means the section or the key did not exist.
答案 1 :(得分:0)
在kernel32.dll中定义了2个Windows外部函数来读/写.ini文件。 您需要将它们导入到您的代码中,然后使用它们:
在VB6中,我曾经这样做过:
Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long
Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As String) As Long
在C#中,您可以这样做:
[DllImport("kernel32")]
internal static extern int WritePrivateProfileString(string lpAppName, string lpKeyName, string lpString, string lpFileName);
[DllImport("kernel32")]
internal static extern int GetPrivateProfileString(string lpAppName, string lpKeyName, string lpDefault, string lpReturnedString, int nSize, string lpFileName);
答案 2 :(得分:0)
您似乎希望使用提供的格式中存在的密钥和数据来阅读ini
文件。因此,如果您想从text file
读取数据,则可以执行
const string HELP = "[Help]", HELP_OP = "[Help Op]", HELP_MOD = "[Help Mod]", HELP_MEMBER = "[Help Member]", HELP_DEFAULT = "[Help Default]";
string [] strConfig = File.ReadAllLines("G:\\Test.txt");
Dictionary<string, List<string>> myConfigConfig = new Dictionary<string, List<string>>();
string curr = string.Empty;
foreach (string str in strConfig)
{
if (str == string.Empty)
continue;
if (str == HELP || str == HELP_OP || str == HELP_MOD || str == HELP_MEMBER || str == HELP_DEFAULT)
{
myConfigConfig.Add(str, new List<string>());
curr = str;
}
else
myConfigConfig[curr].Add(str);
}
答案 3 :(得分:0)
string s = @"
[Help]
Group0
[Help Op]
Group1
[Help Mod]
Group2
[Help Member]
Group3
[Help Default]
Group4";
MatchCollection matches = new Regex(@"\[Help ([a-zA-Z]+)\]\s+([^[]+)\s+", RegexOptions.Singleline).Matches(s);
Dictionary<string, string> result = new Dictionary<string, string>();
foreach (Match match in matches)
result[match.Groups[1].Value] = match.Groups[2].Value;
Console.WriteLine(result["Op"]);