Я получаю результат в формате ниже
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
Хорошо, это результат, который вы хотеть. Что на выходе, что у вас получать?
@ TomTom .. да, я знаю .. это фиктивный вывод
@ 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





Поскольку у вас есть одинарные пробелы в ваших строках, которые вы хотите сохранить (например, «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 () и для выброса пустой строки, которая попала в результат
не будет работать, поскольку в некоторых группах есть место посередине, а в других - нет.
Просто используйте это:
foreach (var item in lines)
{
formatedop = imem.Split(new string[]{" "}, StringSplitOptions.RemoveEmptyEntries);
}
Не будет работать, так как в названии и группе есть пробелы посередине.
Похоже, это должны были быть столбцы с фиксированной шириной, но некоторые поля больше, что вызывает проблемы. Мне удалось разобрать с помощью регулярного выражения. См. Код ниже
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;
}
}
}
это чисто, братан
Я всегда использую имя переменной с группами, чтобы сделать мое регулярное выражение более понятным.
@ jdweng..Спасибо за ответ, но он не работает должным образом. Это ломается по той или иной стоимости. Например: завершено = DateTime.Parse (match.Groups ["завершено"]. Значение); он ожидает значение datetime, но дает некоторое строковое значение. - «AWS - FS - BKP - 001»
Можете ли вы перечислить все возвращаемые значения, если это не DateTime? Я думаю, что поле DateTime пусто, и он пытается проанализировать поле «имя» как DateTime.
@ jdweng..Нет, сейчас я вижу только это возвращаемое значение. Присутствует значение DateTime, оно не пустое. Не могли бы вы уточнить регулярное выражение, чтобы оно давало правильный результат.
Мне нужен образец плохой строки. Похоже, объем возвращается на дату, а это значит, что в строке, вызывающей проблему, должно быть что-то другое раньше. Возможно, пробел в томе или на уровне может состоять из двух слов.
@ 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
Когда вы помещаете строку в комментарий, интервал изменяется, поэтому я не вижу проблемы. Я взял исходное сообщение, и оно работает так, как я ожидаю. Я добавил к своему ответу снимок проанализированной строки, чтобы вы могли видеть, что я получаю.
Раньше я использовал хорошую библиотеку FileHelpers (https://www.filehelpers.net). Он позволяет анализировать файлы, разделенные известными символами, и файлы с полями фиксированной длины. Я не могу сказать, относится ли последнее к вашему случаю (я так не думаю, исходя из того, что вы вставили, но это может быть проблема с копированием / вставкой) Существует также еще одна функция, называемая детектором интеллектуального формата (описанная здесь: https://www.filehelpers.net/example/Advanced/SmartFormatDetector/), которую вы можете попробовать посмотреть, решит ли она вашу проблему. Библиотека действительно проста в использовании, я рекомендую вам попробовать.
Вы знаете, что в вашем выводе дважды используется [1]?