Войти

Показать полную графическую версию : [решено] Массив строк


lox-ness
07-03-2020, 16:50
Добрый День! Существует файл следующего содержания:
Статус
Иванов
Иван
Сергеевич
23-45
Статус
Васечкин
Алексей
Иванович
23-45
Статус
Петров
Антон
Владимирович
56-76

Возможно ли преобразовать что-то примерно следующие:
Статус Иванов Иван Сергеевич 34-45
Статус Васечкин Алексей Иванович 23-45
Статус Петров Антон Владимирович 56-76
Т.е. я теоретически понимаю, что отправная точка должно быть слово "Статус" плюс количество строк. Как-то бы преобразовать в pscustomobject.

Iska
07-03-2020, 17:11
Существует файл следующего содержания: »
Упакуйте его в архив и приложите к сообщению.

Возможно ли преобразовать что-то примерно следующие: »
«Во что-то следующее»?

Ну, например:
$aData = @(Get-Content -Path 'C:\Мои проекты\0304\0001.txt')

for($i = 0; $i -lt $aData.Count; $i = $i + 5) {
$aData[$i..($i + 4)] -join ' '
}

…в pscustomobject. »
Это ничего не говорит о его требуемой структуре.

lox-ness
07-03-2020, 17:36
Вы правы. Существует массив строк из которых необходимо выбрать Номер и Статус Направлен в группу и только у Запросов
Нужно получить что-то, который потом необходимо передать в Excel или csv
Думаю если удаться таким образом преобразоватьpscustomobject @{
Номер = $Number
Статус = $Status}, то проблем экспортировать не будет или может есть возможность сразу передать в Excel или csv

Iska
07-03-2020, 18:59
Существует массив строк из которых необходимо выбрать Номер и Статус Направлен в группу и только у Запросов »
Ничего не понятно. Старайтесь использовать точки и запятые по назначению.

У Вас есть формальное описание структуры этого файла? Если есть — выкладывайте. Если нет — рассказывайте, что знаете.

Я вижу, что у нас есть набор сущностей (назовём их сообщениями), объединённых некой логикой:
https://i.imgur.com/Rkrbe4G.png
Вопрос первый — длина сообщений фиксированная (в строках) или произвольная? Если фиксированная — то какая? Если произвольная — на что нужно ориентироваться в отслеживании начала и конца сообщения? Откуда взялись пробелы перед последней датой? Последняя пустая строка — реальна?

lox-ness
07-03-2020, 20:06
Я смогу изменить входные данные, останутся только Запросы. Один "Запрос" - это 9 строчек из приложенного файла (Нарядов не будет)
Согласно коду приведенному Вами выше, получается новый массив который зрительно выглядит как надо. Новый массив, нужно еще раз преобразовать (или старый сразу)
в вариант - "Номер Статус ФИО" т.е. отсечь лишнюю информацию.
После получения нового объекта передать его в Excel.

Iska
07-03-2020, 20:23
lox-ness, Вы могли бы просто ответить на заданные мною вопросы?

lox-ness
07-03-2020, 20:40
Я стараюсь ответить на все Ваши вопросы.
Если произвольная — на что нужно ориентироваться в отслеживании начала и конца сообщения?
Начало и конец - не изменяются
Откуда взялись пробелы перед последней датой? Последняя пустая строка — реальна?
Этого не будет после изменения входных данных.

Iska
07-03-2020, 20:56
Начало и конец - не изменяются »
Хорошо. Перефразирую — каким именно образом можно определить, что вот здесь вот — начало сообщения, а вот здесь вот — конец сообщения?

Этого не будет после изменения входных данных. »
Во втором выложенном Вами файле пустая строка по-прежнему есть.

lox-ness
07-03-2020, 21:10
:sorry: Хорошо. Перефразирую — каким именно образом можно определить, что вот здесь вот — начало сообщения, а вот здесь вот — конец сообщения?
Начало - Запрос; Конец - 16/12/19 08:24:17 (последняя дата)

Т.е. получиться - Запрос ЗАП.. 1-Направлен в группу М... (12345678) запрос 02/12/19 08:24:22 09/12/19 08:24:17 16/12/19 08:24:17

Iska
08-03-2020, 00:07
lox-ness, мне сложно понять, чего Вы хотите.

$sDelimiter = 'Запрос' + [Environment]::NewLine

$aData = (Get-Content -Path 'C:\Мои проекты\0304\test1.txt' -Raw) -csplit $sDelimiter

-join (
$aData[1..($aData.Count - 1)] | ForEach-Object -Process {
($sDelimiter + $_ -replace [Environment]::NewLine, " ") + [Environment]::NewLine
}
)

lox-ness
08-03-2020, 05:48
Вы все правильно поняли. Спасибо Вам за терпение.

v79italya
08-03-2020, 11:54
Указать путь к файлу и на таблице нажать Обновить

lox-ness
08-03-2020, 16:59
Спасибо

DJ Mogarych
08-03-2020, 21:27
$csv = (gc C:\scripts\temp.txt -Raw -Encoding UTF8) -split "(?=Статус)" |% {
$b = $_ -split "`n"
$b[0] + "`t" + ($b[1..3] -join ' ') + "`t" + $b[4]
} |ConvertFrom-Csv -Delimiter "`t" -Header Status,Name,Number |? Name -match "\w"

Iska
08-03-2020, 21:38
Только не UTF8. Там 1200/UTF-16LE.

DJ Mogarych
08-03-2020, 21:42
:) Я только первое сообщение читал.




© OSzone.net 2001-2012