【问题标题】:How do I split/group a textfile?如何拆分/分组文本文件?
【发布时间】:2011-07-16 19:09:33
【问题描述】:

我想拆分/分组此文本:

[Help]

Group0

[Help Op]

Group1

[Help Mod]

Group2

[Help Member]

Group3

[Help Default]

Group4

我该怎么做? 很喜欢

字符串 op 将等于 Group1,或标签下方的任何文本 [Help OP]

与其他“标签”相同,例如字符串默认等于“group4”

或者即使有更好的方式来布置它,例如 xml 或其他任何东西。

【问题讨论】:

  • 看起来“几乎”像一个 ini 文件。
  • 您在寻找 ini 解析器?
  • 你应该编辑你原来的问题,而不是发布一个新问题,因为你真的没有问任何不同的问题。
  • 您有两个独立的用户帐户吗?
  • 另外一个未注册,不知道怎么登录

标签: c# split text-files


【解决方案1】:

如果您使用 xml 文件,则可以利用 LINQ-TO-XML 来处理解析操作。如果您使用类似 ini 文件或自定义版本的文件,则必须编写自己的解析代码。不是很艰难,但额外的工作仍然没有减少。如果您不介意使用尖括号税,请查看 LINQ-TO-XML。 Here 是一个可以帮助您入门的教程。

注意:我假设您使用的是 .Net 3.5 或更高版本。如果不是这种情况,使用 XML 就需要更多的工作。

更新:

如果您更倾向于使用 ini 方法,您的文件将如下所示:

[帮助]
操作 = 组 1
Mod=Group2
成员=Group3
默认=Group4

[其他部分]
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.

【讨论】:

    【解决方案2】:

    在 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);
    

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:
                    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"]);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-09-09
          • 1970-01-01
          • 2018-12-29
          • 2010-11-03
          • 2019-05-02
          • 2020-07-17
          相关资源
          最近更新 更多