首页 > 解决方案 > 从 C# 中的文本文件中读取自定义文本数据

问题描述

我在文本文件中有以下数据。我需要读取每个应用程序名称的服务实例名称、机器名称及其对应的状态。我在C#中的asp.net控制台应用程序中编码。任何帮助表示赞赏。我其实很震惊。

----- data.txt 文件数据 ---- 应用程序名称:push 服务名称:PushEvent.par 部署状态:成功 服务实例名称:PushEve_PA 机器名称:machine1 状态:正在运行 服务实例名称:PushEve_PA-1 机器名称: machine2 状态:备用应用程序名称:pull 服务名称:Invoke.par 部署状态:已禁用 服务实例名称:Invo_PA 部署状态:已禁用 机器名称:machine3 状态:未知 服务实例名称:Invo_PA-1 部署状态:已禁用 机器名称:machine4 状态: 未知

标签: c#asp.netasp.net-core

解决方案


尝试以下方法:

    static void Main(string[] args)
    {
        Console.WriteLine("Application Name  Service Instance Name  Machine Name         Status");

        string data = File.ReadAllText(@"Path\Data.txt");
        var appArray = data.Split("Application ",StringSplitOptions.RemoveEmptyEntries);

        foreach (var app in appArray)
        {
            var appName = PullValue(app,"Name");
            var serviceArray = app.Split("Service Instance ", StringSplitOptions.RemoveEmptyEntries);
            var services = serviceArray.Skip(1).ToArray();
            foreach(var item in services)
            {
                var serviceInstanceName = PullValue(item, "Name");
                var machineName = PullValue(item, "Machine Name");
                var status = PullValue(item, "Status");
                Console.WriteLine("    {0}            {1}            {2}            {3}",appName, serviceInstanceName, machineName, status);

            }
        }
    }
    private static string PullValue(string line, string key)
    {
        key = key + ": ";
        int ndx = line.IndexOf(key, 0, StringComparison.InvariantCultureIgnoreCase);
        if (ndx >= 0)
        {
            var i=line.IndexOf(" ");
            int ndx2 = line.IndexOf(" ", ndx+key.Length+1, StringComparison.InvariantCultureIgnoreCase);
            if (ndx2 == -1)
                ndx2 = line.Length - 1;
            return line.Substring(ndx + key.Length, ndx2 - ndx - key.Length).Trim();
        }
        return "";
    }

结果:

在此处输入图像描述


推荐阅读