【问题标题】:C# - Reading a file to a list and splitting on a delimiterC# - 将文件读取到列表并在分隔符上拆分
【发布时间】:2019-07-03 02:40:13
【问题描述】:

我有一个文本文件,我需要从中提取单个值。一个例子是:

Name: John Doe
Key Length: 3
a90nm84ang9834n
90v84jgseidfrlg
f39048s9ipu4sdd
Random: true

我需要我的输出是这样的:

Visitor: John Doe
Key Value: a90nm84ang9834n90v84jgseidfrlgf39048s9ipu4sdd

现在,我正在将文件读入列表并单独调用值,但这不允许我重命名字符串的第一个值(例如名称 -> 访问者)。

我真正的问题是,在将文件读入列表后,是否可以进一步将这些行中的每一行从分隔符中分离出来并引用该对的 1 部分?

编辑 - 这是我正在使用的代码示例,但它并没有做我想做的事情:

string path = @"C:\temp\foo.txt";
List<string> lines = File.ReadAllLines(path).ToList();

Console.WriteLine("Filename: " + path);
Console.WriteLine("Length: " + lines[1]); //This outputs "Length: Key Length: 3"

【问题讨论】:

  • 问题不是很清楚。看看你当前的代码是什么会很有用
  • 请在您的问题中发布您尝试过的内容。文本文件中的多个条目如何分隔?换行符?
  • 如果你不习惯使用C#PowerShell Team Blog 刚刚在文本解析上发布了a very useful article series。无需事先了解powershell
  • 提示:File.ReadAllLines Method“将文件的所有行读入字符串数组”。您可以使用 string.Split 和 ':' 在冒号处拆分。
  • 您的列表条目是名称 + " " + 键一起作为一个字符串?

标签: c# .net text-parsing


【解决方案1】:

假设您的数据的格式都相同......这样的事情怎么样:

private static void ParseDataFile(string dataFile)
{
    var lines = File.ReadAllLines(dataFile);

    for (var i = 0; i < lines.Length; i++)
    {
        if (lines[i].Contains("Name"))
        {
            Console.WriteLine($"Visitor: {lines[i].Remove(0, 6)}");
            var keyLineCount = Convert.ToInt32(lines[++i].Remove(0, 12));
            string key = string.Empty;

            for (var j = 0; j < keyLineCount; j++)
            {
                key += lines[++i];
            }

            i++;
            Console.WriteLine($"Key Value: {key}");
        }
    }
}

回答您的具体问题:是的,可以在不同时间将字符串拆分为不同的字符:

string s = "1234567890";
string[] parts1 = s.Split('5'); // 2 parts "1234" and "67890"
string[] parts2 = parts1[1].Split('7','9'); // 3 parts "6", "8" and "0"

等等

【讨论】:

    猜你喜欢
    • 2011-09-06
    • 2011-12-25
    • 1970-01-01
    • 2019-12-07
    • 1970-01-01
    • 1970-01-01
    • 2015-11-09
    • 1970-01-01
    • 2022-12-25
    相关资源
    最近更新 更多