2016-09-05 2 views
-2

Мне нужна помощь в понимании логики, как я могу разобрать текстовый файл, который в настоящее время не в правильном формате, из-за которого очень сложно прочитать содержимое журнала. Текст входного файла выглядит следующим образом:Нужна помощь для разбора текстового файла

========== Test1 (1) ========== Id UTC Date/Time Message 4d1eb19c-5420-4bb2-9e21-65880eb90429 08-30T01:26:24Z Messagel Name='abz', Connection='Usb', Fleet Report Id='ca9d3457-1564-4066-8f5e-12345678', Fleet Proxy Id ='ghjfda7-c7e8-4bb2-9dd4-2f4c3b2498a3,4d1eb19c-5420-4bb2-9e21-65880eb90429 08-30T01:26:24Z Message2 Name='abz', Connection='Usb', Fleet Report Id='ca9d3457-1564-4066-8f5e-12345678', Fleet Proxy Id ='ghjfda7-c7e8-4bb2-9dd4-2f4c3b2498a3.,4d1eb19c-5420-4bb2-9e21-65880eb90429 08-30T01:26:24Z Message2 Name='abz', Connection='Usb', Fleet Report Id='ca9d3457-1564-4066-8f5e-12345678', Fleet Proxy Id ='ghjfda7-c7e8-4bb2-9dd4-2f4c3b2498a3. 

========== Test2 (1) ========== Id UTC Date/Time Message 4d1eb19c-5420-4bb2-9e21-65880eb90429 08-30T01:26:24Z Message2 Name='xyz', Connection='Usb', Fleet Report Id='ca9d09e7-1564-4066-8f5e-6a123456', Fleet Proxy Id ='0fsfsda7-c7e8-4bb2-9dd4-2f4c3b2498a3,4d1eb19c-5420-4bb2-9e21-65880eb90429 08-30T01:26:24Z Message2 Name='abz', Connection='Usb', Fleet Report Id='ca9d3457-1564-4066-8f5e-12345678', Fleet Proxy Id ='ghjfda7-c7e8-4bb2-9dd4-2f4c3b2498a3.,4d1eb19c-5420-4bb2-9e21-65880eb90429 08-30T01:26:24Z Message2 Name='abz', Connection='Usb', Fleet Report Id='ca9d3457-1564-4066-8f5e-12345678', Fleet Proxy Id ='ghjfda7-c7e8-4bb2-9dd4-2f4c3b2498a3.

Есть несколько разделов {Test1 test2 ... п}, и каждая из секций содержит несколько времени Id UTC Дата и сообщение также все разделы начинаются с

и заканчиваться

Как разместить их в табличном формате? Необходимость вывода должен быть отформатирован, как показано ниже в табличном формате:

ID UTC Date/Time Message 

========== Test1 (1) ========== 

Id         UTC Date/Time Message 
4d1eb19c-5420-4bb2-9e21-65880eb90429 08-30T01:26:24Z Messagel Name='abz', Connection='Usb', Fleet Report Id='ca9d3457-1564-4066-8f5e-12345678', Fleet Proxy Id ='ghjfda7-c7e8-4bb2-9dd4-2f4c3b2498a3. 

4d1eb19c-5420-4bb2-9e21-65880eb90429 08-30T01:26:24Z Message2 Name='abz', Connection='Usb', Fleet Report Id='ca9d3457-1564-4066-8f5e-12345678', Fleet Proxy Id ='ghjfda7-c7e8-4bb2-9dd4-2f4c3b2498a3. 

4d1eb19c-5420-4bb2-9e21-65880eb90429 08-30T01:26:24Z Message3 Name='abz', Connection='Usb', Fleet Report Id='ca9d3457-1564-4066-8f5e-12345678', Fleet Proxy Id ='ghjfda7-c7e8-4bb2-9dd4-2f4c3b2498a3. 

========== Test2 (1) ========== 
Id         UTC Date/Time Message 
4d1eb19c-5420-4bb2-9e21-65880eb90429 08-30T01:26:24Z Message1 Name='xyz', Connection='Usb', Fleet Report Id='ca9d09e7-1564-4066-8f5e-6a123456', Fleet Proxy Id ='0fsfsda7-c7e8-4bb2-9dd4-2f4c3b2498a3, 

4d1eb19c-5420-4bb2-9e21-65880eb90429 08-30T01:26:24Z Message2 Name='abz', Connection='Usb', Fleet Report Id='ca9d3457-1564-4066-8f5e-12345678', Fleet Proxy Id ='ghjfda7-c7e8-4bb2-9dd4-2f4c3b2498a3, 

4d1eb19c-5420-4bb2-9e21-65880eb90429 08-30T01:26:24Z Message3 Name='abz', Connection='Usb', Fleet Report Id='ca9d3457-1564-4066-8f5e-12345678', Fleet Proxy Id ='ghjfda7-c7e8-4bb2-9dd4-2f4c3b2498a3.

Это то, что я попробовал, но это не разборе все содержимое внутри текстового файла.

$file = Get-Content -path .\ViewSource.txt | Where-Object { 
    $_ -ne "" 
} | ForEach-Object { 
    $_ -replace '<[^>]+>', '' 
} 
foreach ($line in $file) { 
    $elements = $line.Split(" ", [StringSplitOptions]::RemoveEmptyEntries) 
    [PSCustomObject]@{ 
    Id   = $elements[8] 
    UtcDateTime = $elements[9] 
    Message  = $elements[10..19] -join " " 
    } 
} 
+0

Вы забыли показать, как все разделы начинаются и заканчиваются. Также неясно, как выглядит исходный файл, когда есть несколько разделов. Для размещенного бита вы можете использовать что-то вроде '' '(Get-Content. \ 1.txt) -replace '^ (= +. +? = +) (. +)'," $ 1'r'n'r 'n' $ 2'r'n" | Out-File r: \ 2.txt -Encoding utf8''' – wOxxOm

+0

Пожалуйста, покажите нам что-то, что вы пробовали. Ожидается, что вы, по крайней мере, продемонстрировали некоторые усилия. На данный момент это читается как запрос на запись кода, который не является тем, для чего здесь SO. – Matt

+0

Большое спасибо за помощь ... Он начинается с

========== Test1 (1) ========== Идентификатор UTC Дата.

Sam

ответ

0

С вашим ID и Timestamp поля имеют фиксированную ширину, и не похоже, несколько сообщений в строке, самый простой подход, вероятно, будет заменить «инлайн» заголовки с отформатирован/завернутые строка заголовка:

$inline = ' Id UTC Date/Time Message ' 
$wrapped = "`nId         UTC Date/Time Message`n" 
(Get-Content -Path 'C:\path\to\input.txt') -replace $inline, $wrapped | 
    Set-Content -Path 'C:\path\to\output.txt' 

Edit: если у вас есть несколько сообщений в каждой строке вы также должны соответствовать последовательности GUID и временной метки, которые предшествуют каждое сообщение и вставить переносы строк до этих матчей:

$inline = ' Id UTC Date/Time Message ' 
$wrapped = "`nId         UTC Date/Time Message" 

$guid = '[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}' 
$ts = '\d{2}-\d{2}T\d{2}:\d{2}:\d{2}Z' 

(Get-Content 'C:\path\to\input.txt') -replace $inline, $wrapped -replace "($guid) +($ts) +", "`n`$1 `$2 " | 
    Set-Content -Path 'C:\path\to\output.txt' 
+0

Благодарим за помощь , Но текстовый файл имеет несколько сообщений в одной строке, начиная с сообщения

и заканчивается

, и все сообщения должны быть отформатированы в табличном формате с заголовком ID Дата/Время и сообщение. Еще раз благодарю вас за ваше время. – Sam

Смежные вопросы