Как разобрать такую ​​строку?

Я получаю результат в формате ниже

                            size client                                 ssflags                                 group                                   flags                                                 date     time                                                level volume                                               ss completed              name
                       290502556 awsknwpi00                             vrF                                     BOOTSTRAP PROTECTION                    cr                                                        10/05/2018 07:56:29 PM                                    full AFTD-Bootstrap-00                                        10/05/2018 07:56:36 PM bootstrap  
                       916940228 aunnd.production.transfservices.com vF                               AWS-FS-BKP-DUPL                         cb                                                        10/05/2018 07:07:28 PM                                    incr AU-AWS-FS-BKP-001                                        10/05/2018 07:17:52 PM C:\
                            5016 aunnd.production.transfservices.com vF                               AWS-FS-BKP-DUPL                         cb                                                        10/05/2018 07:07:34 PM                                    incr AU-AWS-FS-BKP-001                                        10/05/2018 07:07:51 PM F:\
                       579984280 aunnd.production.transfservices.com vF                               AWS-FS-BKP-DUPL                         cb                                                        10/05/2018 07:09:24 PM                                    full AU-AWS-FS-BKP-001                                        10/05/2018 07:17:48 PM VSS SYSTEM FILESET:\
                        35291616 aunnd.production.transfservices.com vF                               AWS-FS-BKP-DUPL-TEMP                    cb                                                        10/05/2018 07:08:53 PM                                    full AU-AWS-FS-BKP-001                                        10/05/2018 07:09:30 PM VSS SYSTEM BOOT:\
                       638349452 aunnd.production.transfservices.com vF                               AWS-FS-BKP-DUPL-TEMP                    cb                                                        10/05/2018 07:09:20 PM                                    full AU-AWS-FS-BKP-001                                        10/05/2018 07:13:03 PM VSS SYSTEM FILESET:\
                      2774969836 aunnd.production.transfservices.com vF                             AWS-FS-BKP-DUPL-TEMP                    cb                                                        10/05/2018 07:08:11 PM                                    incr AU-AWS-FS-BKP-001                                        10/05/2018 07:30:45 PM D:\
                       743703956 aunnd.production.transfservices.com vF                             AWS-FS-BKP-DUPL-TEMP                    cb                                                        10/05/2018 07:08:10 PM                                    incr AU-AWS-FS-BKP-001                                        10/05/2018 07:30:54 PM E:\
                       410140044 aunnd.production.transfservices.com vF                             AWS-FS-BKP-DUPL-TEMP                    cb                                                        10/05/2018 07:08:09 PM                                    incr AU-AWS-FS-BKP-001                                        10/05/2018 07:13:45 PM F:\
                        71691676 aunnd.production.transfservices.com vF                              GIS Servers_Dup                         cb                                                        10/05/2018 01:00:08 AM                                    full AU-AWS-FS-BKP-001                                        10/05/2018 01:00:48 AM VSS SYSTEM SERVICES:\
                        15075028 aunnd.production.transfservices.com vrF                            AWS-FS-BKP-DUPL-TEMP                    cr                                                        10/05/2018 07:17:24 PM                                    full AU-AWS-FS-BKP-001                                        10/05/2018 07:17:53 PM \\?\VOLUME{2186CF2E-5D39-11DF-9211-806E6F6E6963}\
                         3562216 aunswpfilv03.production.transfieldservices.com vF                              GIS Servers_Dup                         cb                                                        10/05/2018 01:01:05 AM                                    incr AU-AWS-FS-BKP-001                                        10/05/2018 01:06:05 AM D:\
                      1382628028 aunnd.production.transfservices.com vF                                AWS-FS-BKP-DUPL-TEMP                    cb                                                        10/05/2018 07:07:17 PM                                    incr AU-AWS-FS-BKP-001                                        10/05/2018 07:12:38 PM C:\
                               4 aunnd.production.transfservices.com vF                                AWS-FS-BKP-DUPL-TEMP                    cb                                                        10/05/2018 07:07:18 PM                                    incr AU-AWS-FS-BKP-001                                        10/05/2018 07:07:37 PM P:\
                       258436476 aunnd.production.transfservices.com vrF                               AWS-FS-BKP-DUPL-TEMP                    cr                                                        10/05/2018 07:07:16 PM                                    full AU-AWS-FS-BKP-001                                        10/05/2018 07:07:55 PM \\?\VOLUME{CE3268A4-79C3-11E6-8138-806E6F6E6963}\
                               4 aunnd.production.transfservices.com vF                                AWS-FS-BKP-DUPL-TEMP                    cb                                                        10/05/2018 07:07:19 PM                                    incr AU-AWS-FS-BKP-001                                        10/05/2018 07:07:38 PM D:\
                           21956 aunnd.production.transfservices.com vF                                AWS-FS-BKP-DUPL-TEMP                    cb                                                        10/05/2018 07:07:17 PM                                    incr AU-AWS-FS-BKP-001                                        10/05/2018 07:07:33 PM E:\
                         3922628 aunnd.production.transfservices.com vF                                AWS-FS-BKP-DUPL-TEMP                    cb                                                        10/05/2018 07:11:29 PM                                    incr AU-AWS-FS-BKP-001                                        10/05/2018 07:11:48 PM WINDOWS ROLES AND FEATURES:\
                       258436476 aunnd.production.transfservices.com vrF                               AWS-FS-BKP-DUPL-TEMP                    cr                                                        10/05/2018 07:07:18 PM                                    full AU-AWS-FS-BKP-001                                        10/05/2018 07:08:05 PM \\?\VOLUME{15D9292D-7A06-11E6-8138-806E6F6E6963}\
                       258436476 aunnd.production.transfservices.com vrF                               AWS-FS-BKP-DUPL                         cr                                                        10/05/2018 07:07:40 PM                                    full AU-AWS-FS-BKP-001                                        10/05/2018 07:08:35 PM \\?\VOLUME{15D9292D-7A06-11E6-8138-806E6F6E6963}\
                      1153400396 aunnd.production.transfservices.com vF                                AWS-FS-BKP-DUPL-TEMP                    cb                                                        10/05/2018 07:09:09 PM                                    incr AU-AWS-FS-BKP-001                                        10/05/2018 07:30:18 PM C:\
                      1321796176 aunnd.production.transfservices.com vF                                AWS-FS-BKP-DUPL-TEMP                    cb                                                        10/05/2018 07:09:16 PM                                    incr AU-AWS-FS-BKP-001                                        10/05/2018 07:35:19 PM C:\
                        15075028 aunnd.production.transfservices.com vrF                               AWS-FS-BKP-DUPL-TEMP                    cr                                                        10/05/2018 07:09:15 PM                                    full AU-AWS-FS-BKP-001                                        10/05/2018 07:09:46 PM \\?\VOLUME{AEF6A4F6-4DC8-11E0-92F6-806E6F6E6963}\
                               4 awsn.ad.broadrum.com        vF                                      AWS-FS-BKP-DUPL-TEMP                    cb                                                        10/05/2018 07:10:19 PM                                    incr AU-AWS-FS-BKP-001                                        10/05/2018 07:11:21 PM /bin
                               4 awsn.ad.broadrum.com        vF                                      AWS-FS-BKP-DUPL-TEMP                    cb                                                        10/05/2018 07:10:36 PM                                    incr AU-AWS-FS-BKP-001                                        10/05/2018 07:11:44 PM /boot
                               4 awsn.ad.broadrum.com        vF                                      AWS-FS-BKP-DUPL-TEMP                    cb                                                        10/05/2018 07:10:27 PM                                    incr AU-AWS-FS-BKP-001                                        10/05/2018 07:11:30 PM /cgroup
                               4 awsn.ad.broadrum.com        vF                                      AWS-FS-BKP-DUPL                         cb                                                        10/05/2018 07:12:25 PM                                    incr AU-AWS-FS-BKP-001                                        10/05/2018 07:13:28 PM /dev
                               4 awsn.ad.broadrum.com        vF                                      AWS-FS-BKP-DUPL                         cb                                                        10/05/2018 07:12:12 PM                                    incr AU-AWS-FS-BKP-001                                        10/05/2018 07:13:15 PM /etc
                               4 awsn.ad.broadrum.com        vF                                      AWS-FS-BKP-DUPL                         cb                                                        10/05/2018 07:12:13 PM                                    incr AU-AWS-FS-BKP-001                                        10/05/2018 07:13:17 PM /lib64
                               4 awsn.ad.broadrum.com        vF                                      AWS-FS-BKP-DUPL-TEMP                    cb                                                        10/05/2018 07:10:48 PM                                    incr AU-AWS-FS-BKP-001                                        10/05/2018 07:11:57 PM /lost+found
                               4 awsn.ad.broadrum.com        vF                                      AWS-FS-BKP-DUPL-TEMP                    cb                                                        10/05/2018 07:11:06 PM                                    incr AU-AWS-FS-BKP-001                                        10/05/2018 07:12:18 PM /media
                               4 awsn.ad.broadrum.com        vF                                      AWS-FS-BKP-DUPL                         cb                                                        10/05/2018 07:12:47 PM                                    incr AU-AWS-FS-BKP-001                                        10/05/2018 07:13:51 PM /media
                               4 awsn.ad.broadrum.com        vF                                      AWS-FS-BKP-DUPL                         cb                                                        10/05/2018 07:11:57 PM                                    incr AU-AWS-FS-BKP-001                                        10/05/2018 07:13:02 PM /mnt
                               4 awsn.ad.broadrum.com        vF                                      AWS-FS-BKP-DUPL-TEMP                    cb                                                        10/05/2018 07:10:41 PM                                    incr AU-AWS-FS-BKP-001                                        10/05/2018 07:11:46 PM /net
                               4 awsn.ad.broadrum.com        vF                                      AWS-FS-BKP-DUPL                         cb                                                        10/05/2018 07:12:27 PM                                    incr AU-AWS-FS-BKP-001                                        10/05/2018 07:13:31 PM /net
                         1707740 awsn.ad.broadrum.com        vF                                      AWS-FS-BKP-DUPL                         cb                                                        10/05/2018 07:11:29 PM                                    incr AU-AWS-FS-BKP-001                                        10/05/2018 07:12:35 PM /nsr/cache
                           78220 awsn.ad.broadrum.com        vF                                      AWS-FS-BKP-DUPL-TEMP                    cb                                                        10/05/2018 07:08:09 PM                                    incr AU-AWS-FS-BKP-001                                        10/05/2018 07:09:12 PM /nsr/logs
                           84084 awsn.ad.broadrum.com        vF                                      AWS-FS-BKP-DUPL                         cb                                                        10/05/2018 07:11:34 PM                                    incr AU-AWS-FS-BKP-001                                        10/05/2018 07:12:39 PM /nsr/logs
                               4 awsn.ad.broadrum.com        vF                                      AWS-FS-BKP-DUPL                         cb                                                        10/05/2018 07:11:23 PM                                    incr AU-AWS-FS-BKP-001                                        10/05/2018 07:12:30 PM /nsr/lost+found
                       107087992 awsn.ad.broadrum.com        vF                                      AWS-FS-BKP-DUPL-TEMP                    cb                                                        10/05/2018 07:09:39 PM                                    incr AU-AWS-FS-BKP-001                                        10/05/2018 07:10:49 PM /nsr/nmc/nmcdb
                        87359588 awsn.ad.broadrum.com        vF                                      AWS-FS-BKP-DUPL                         cb                                                        10/05/2018 07:12:48 PM                                    full AU-AWS-FS-BKP-001                                        10/05/2018 07:13:56 PM /nsr/nmc/nmcdb_stage
                            3360 awsn.ad.broadrum.com        vF                                      AWS-FS-BKP-DUPL-TEMP                    cb                                                        10/05/2018 07:08:08 PM                                    incr AU-AWS-FS-BKP-001                                        10/05/2018 07:09:12 PM /nsr/tmp
                            3360 awsn.ad.broadrum.com        vF                                      AWS-FS-BKP-DUPL                         cb                                                        10/05/2018 07:11:39 PM                                    incr AU-AWS-FS-BKP-001                                        10/05/2018 07:12:44 PM /nsr/tmp
                               4 awsn.ad.broadrum.com        vF                                      AWS-FS-BKP-DUPL                         cb                                                        10/05/2018 07:11:18 PM                                    incr AU-AWS-FS-BKP-001                                        10/05/2018 07:12:22 PM /root

Я пытаюсь проанализировать вывод с помощью метода разделения. Я попытался разделить, используя пробел, но это не дает мне правильного результата. Я пробовал разделить следующий фрагмент кода:

string[] stringSeparators = new string[] { "\r\n" };
string[] lines = text.Split(stringSeparators, StringSplitOptions.None);
lines = lines.Where(x => !string.IsNullOrEmpty(x)).ToArray();
foreach (var item in lines)
{
    formatedop = Regex.Split(item, @"\s{3,}");
    //formatedop = item.Split('\t');
    formatedop = formatedop.Where(x => !string.IsNullOrEmpty(x)).ToArray();
}

Мне нужен вывод в следующем формате:

formatedop[0]=290502556
formatedop[1]=awsnwkip01
formatedop[1]=vrF
formatedop[2]=BOOTSTRAP PROTECTION
formatedop[3]=cr
formatedop[4]=10/05/2018 07:56:29 PM
formatedop[5]=full
formatedop[6]=AFTD-Bootstrap-00
formatedop[7]=10/05/2018 07:56:36 PM
formatedop[8]=bootstrap

Вы знаете, что в вашем выводе дважды используется [1]?

TomTom 14.10.2018 14:44

Хорошо, это результат, который вы хотеть. Что на выходе, что у вас получать?

David Zemens 14.10.2018 14:46

@ TomTom .. да, я знаю .. это фиктивный вывод

Developer 14.10.2018 14:48

@ DavidZemens .. Я получаю следующий вывод formatedop [0] = 290502556 awsnwkip01 formatedop [1] = vrF formatedop [2] = BOOTSTRAP PROTECTION formatedop [3] = cr formatedop [4] = 10/05/2018 07:56: 29 PM formatedop [5] = полный AFTD-Bootstrap-00 formatedop [6] = 10/05/2018 19:56:36 bootstrap

Developer 14.10.2018 14:54
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
3
4
110
4

Ответы 4

Поскольку у вас есть одинарные пробелы в ваших строках, которые вы хотите сохранить (например, «10/05/2018 07:56:36 PM»), но в других местах одиночные пробелы, которые используются как разделители (например, «4 awsn.ad. broadrum.com "), можно быстро и легко сделать s.th. вот так (обратите внимание на два пробела в разделителе строк!):

var result = line[1].Split(new string[]{"  "}, StringSplitOptions.RemoveEmptyEntries).ToString();

Это даст вам следующее:

Список (5) {"290502556 awsknwpi00 vrF", "BOOTSTRAP PROTECTION", "cr", "05.10.2018 19:56:29 PM full AFTD - Bootstrap - 00", "05.10.2018 07:56: 36 вечера начальной загрузки "}

Затем вы можете разделить первый элемент дальше вниз одним пробелом и вставить вывод этой операции в индекс 1 и удалить неразделенную версию в индексе 0, s.th. нравится:

result.InsertRange(1, result[0].Split(' '));
result.RemoveAt(0);

Это даст вам что-то. нравится:

List (8) {"", "290502556", "awsknwpi00", "vrF", "BOOTSTRAP PROTECTION", "cr", "05.10.2018 19:56:29 full AFTD - Bootstrap - 00", " 05.10.2018 19:56:36 bootstrap "}

Как видите, вам, возможно, придется выполнить итерацию и выполнить дополнительную обрезку, но это только начало.

вы можете обернуть это в красивое лямбда-выражение, выполнить итерацию для вызова .Trim () и для выброса пустой строки, которая попала в результат

DanDan 14.10.2018 15:18

не будет работать, поскольку в некоторых группах есть место посередине, а в других - нет.

jdweng 14.10.2018 15:44

Просто используйте это:

foreach (var item in lines)
{
    formatedop = imem.Split(new string[]{" "}, StringSplitOptions.RemoveEmptyEntries);
}

Не будет работать, так как в названии и группе есть пробелы посередине.

jdweng 14.10.2018 15:43

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

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Text.RegularExpressions;

namespace ConsoleApplication1
{
    class Program
    {
        const string FILENAME = @"c:\temp\test.txt";
        static void Main(string[] args)
        {
            StreamReader reader = new StreamReader(FILENAME);
            string line = "";
            List<Client> clients = new List<Client>();
            int lineNumber = 0;
            while((line = reader.ReadLine()) != null)
            {
                if (++lineNumber > 1)
                {
                    clients.Add(new Client(line));
                }
            }


        }
    }
    public class Client
    {
        public long size { get; set; }
        public string client { get; set; }
        public string ssflags { get; set; }
        public string group { get; set; }
        public string flags { get; set; }
        public DateTime date { get; set; }
        public string level { get; set; }
        public string volume { get; set; }
        public DateTime completed { get; set; }
        public string name { get; set; }

        public Client(string line)
        {
            string pattern = @"^\s*(?'size'[^\s]+)\s+(?'client'[^\s]+)\s+(?'ssflags'[^\s]+)\s+" +
                @"(?'group'.*)\s+(?'flags'cr|cb)\s+(?'date'.+(AM|PM))\s+" +
                @"(?'level'[^\s]+)\s+(?'volume'[^\s]+)\s+" +
                @"(?'completed'.+(AM|PM))\s+(?'name'.*)";

            Match match = Regex.Match(line, pattern);

            size = long.Parse(match.Groups["size"].Value);
            client = match.Groups["client"].Value;
            ssflags = match.Groups["ssflags"].Value;
            group = match.Groups["group"].Value.Trim();
            flags = match.Groups["flags"].Value;

            date = DateTime.Parse(match.Groups["date"].Value);
            level = match.Groups["level"].Value;
            volume = match.Groups["volume"].Value;
            completed = DateTime.Parse(match.Groups["completed"].Value);
            name = match.Groups["name"].Value;

        }
    }
}

это чисто, братан

Technivorous 14.10.2018 16:13

Я всегда использую имя переменной с группами, чтобы сделать мое регулярное выражение более понятным.

jdweng 15.10.2018 01:40

@ jdweng..Спасибо за ответ, но он не работает должным образом. Это ломается по той или иной стоимости. Например: завершено = DateTime.Parse (match.Groups ["завершено"]. Значение); он ожидает значение datetime, но дает некоторое строковое значение. - «AWS - FS - BKP - 001»

Developer 22.10.2018 08:47

Можете ли вы перечислить все возвращаемые значения, если это не DateTime? Я думаю, что поле DateTime пусто, и он пытается проанализировать поле «имя» как DateTime.

jdweng 22.10.2018 10:44

@ jdweng..Нет, сейчас я вижу только это возвращаемое значение. Присутствует значение DateTime, оно не пустое. Не могли бы вы уточнить регулярное выражение, чтобы оно давало правильный результат.

Developer 26.10.2018 08:59

Мне нужен образец плохой строки. Похоже, объем возвращается на дату, а это значит, что в строке, вызывающей проблему, должно быть что-то другое раньше. Возможно, пробел в томе или на уровне может состоять из двух слов.

jdweng 26.10.2018 11:42

@ jdweng .. Это строка, которая создает проблему. 290502556 artykrtp0o vrF BOOTSTRAP PROTECTION cr 10/05/2018 19:56:29 PM full AFTD - Bootstrap - 00 10/05/2018 07:56:36 PM bootstrap Volum должен быть AFTD - Bootstrap - 00

Developer 28.10.2018 15:56

Когда вы помещаете строку в комментарий, интервал изменяется, поэтому я не вижу проблемы. Я взял исходное сообщение, и оно работает так, как я ожидаю. Я добавил к своему ответу снимок проанализированной строки, чтобы вы могли видеть, что я получаю.

jdweng 28.10.2018 21:18

Раньше я использовал хорошую библиотеку FileHelpers (https://www.filehelpers.net). Он позволяет анализировать файлы, разделенные известными символами, и файлы с полями фиксированной длины. Я не могу сказать, относится ли последнее к вашему случаю (я так не думаю, исходя из того, что вы вставили, но это может быть проблема с копированием / вставкой) Существует также еще одна функция, называемая детектором интеллектуального формата (описанная здесь: https://www.filehelpers.net/example/Advanced/SmartFormatDetector/), которую вы можете попробовать посмотреть, решит ли она вашу проблему. Библиотека действительно проста в использовании, я рекомендую вам попробовать.

Другие вопросы по теме