我如何分割/组一个文本文件

本文关键字:一个 文本 文件 分割 何分割 | 更新日期: 2023-09-27 18:02:12

我想分割/分组这个文本:

[Help]
Group0
[Help Op]
Group1
[Help Mod]
Group2
[Help Member]
Group3
[Help Default]
Group4

我该怎么做?就像

string op将等于Group1,或者标签下的任何文本[Help op]

与其他'标签'相同,如string默认等于'group4'

或者即使有更好的方式来展示它,比如XML或者其他什么

我如何分割/组一个文本文件

如果使用xml文件,则可以利用LINQ-TO-XML来处理解析操作。如果使用ini文件或自定义版本之类的文件,则必须编写自己的解析代码。不是特别辛苦,但仍然是额外的工作。如果您不介意使用尖括号税,请查看LINQ-TO-XML。这是一个教程,可以让你开始。

注意:我假设你正在使用。net 3.5或更高版本。如果不是这样,使用XML就需要更多的工作。

更新:

如果你更倾向于ini方式,你的文件将是这样的:


(帮助)Op = Group1
Mod = Group2
成员= Group3
默认= Group4

[Some Other section]
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.

在kernel32.dll中定义了两个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);

您似乎想要读取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);
          }
            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"]);