Как разобрать этот вид вывода в C # - PullRequest
0 голосов
/ 01 октября 2018

У меня есть вывод в следующем формате

Image Name                     PID Services                                    
========================= ======== ============================================
System Idle Process              0 N/A                                         
services.exe                   436 N/A                                         
svchost.exe                    500 BrokerInfrastructure, DcomLaunch, LSM,      
                                   PlugPlay, Power, SystemEventsBroker         
vnetd.exe                    18504 NetBackup Legacy Network Service   

Я хочу сохранить вывод в массиве так:

ar[0]=System Idle Process
ar[1]=0
ar[2]=N/A

Я попытался разбить строку на основе пробелано это не сработало.Может кто-нибудь подсказать, как разделить это и получить желаемый вывод в c #

Ответы [ 2 ]

0 голосов
/ 01 октября 2018

Похоже, что информация, которую вы получаете, имеет фиксированную ширину вывода, поэтому вы можете просто использовать string.Substring, чтобы каждый раз получать нужную часть строки.

Вы можете читать элементыв вашем вводе, например, так:

public static IEnumerable<ProcessItem> GetItemsFromText(string text) {
    var lines = text.Split( new [] { "\r", "\n" }, StringSplitOptions.RemoveEmptyEntries );
    ProcessItem current = null;
    Console.WriteLine( "Lines found: {0}", lines.Length );
    // skip first 2 lines (header and = signs)
    for (int i = 2; i < lines.Length; i++) {
        var name = lines[i].Substring( 0, 25 ).Trim();
        var pid = lines[i].Substring( 26, 8 ).Trim();
        var services = lines[i].Substring( 35 ).Trim();
        if (!string.IsNullOrWhiteSpace( name ) ) {
            if (current != null) {
                yield return current;
            }
            current = new ProcessItem {
                Name = name,
                Pid = pid,
                Services = services
            };
        } else {
            current.Services += ' ' + services;
        }
    }
    if (current != null) {
        yield return current;
    }
}

Эта версия также будет подтверждать, что у вас есть несколько позиций, и отправит обратно пользовательский класс ProcessItem, который выглядит следующим образом

public class ProcessItem {
    public string Name { get; set; }
    public string Pid { get;set; }
    public string Services { get;set; }
}

Работающую версию кода, которую вы можете найти в этом .netfiddle

0 голосов
/ 01 октября 2018
use substring on the basis of padding 

formatedop[0] = item.Substring(0, 25);
formatedop[1] = item.Substring(25, 10);
formatedop[2] = item.Substring(35, 40);

it will give the result
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...