Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Массив строк (http://forum.oszone.net/showthread.php?t=344341)

lox-ness 07-03-2020 16:50 2912323

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


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

Т.е. я теоретически понимаю, что отправная точка должно быть слово "Статус" плюс количество строк. Как-то бы преобразовать в pscustomobject.

Iska 07-03-2020 17:11 2912328

Цитата:

Цитата lox-ness
Существует файл следующего содержания: »

Упакуйте его в архив и приложите к сообщению.

Цитата:

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

«Во что-то следующее»?

Ну, например:
Код:

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

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

Цитата:

Цитата lox-ness
…в pscustomobject. »

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

lox-ness 07-03-2020 17:36 2912331

Вы правы. Существует массив строк из которых необходимо выбрать Номер и Статус Направлен в группу и только у Запросов
Нужно получить что-то, который потом необходимо передать в Excel или csv
Думаю если удаться таким образом преобразовать
Код:

pscustomobject @{
Номер = $Number
Статус = $Status}

, то проблем экспортировать не будет или может есть возможность сразу передать в Excel или csv

Iska 07-03-2020 18:59 2912335

Цитата:

Цитата lox-ness
Существует массив строк из которых необходимо выбрать Номер и Статус Направлен в группу и только у Запросов »

Ничего не понятно. Старайтесь использовать точки и запятые по назначению.

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

Я вижу, что у нас есть набор сущностей (назовём их сообщениями), объединённых некой логикой:
Скрытый текст

Вопрос первый — длина сообщений фиксированная (в строках) или произвольная? Если фиксированная — то какая? Если произвольная — на что нужно ориентироваться в отслеживании начала и конца сообщения? Откуда взялись пробелы перед последней датой? Последняя пустая строка — реальна?

lox-ness 07-03-2020 20:06 2912339

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

Iska 07-03-2020 20:23 2912341

lox-ness, Вы могли бы просто ответить на заданные мною вопросы?

lox-ness 07-03-2020 20:40 2912342

Вложений: 1
Я стараюсь ответить на все Ваши вопросы.
Цитата:

Если произвольная — на что нужно ориентироваться в отслеживании начала и конца сообщения?
Начало и конец - не изменяются
Цитата:

Откуда взялись пробелы перед последней датой? Последняя пустая строка — реальна?
Этого не будет после изменения входных данных.

Iska 07-03-2020 20:56 2912343

Цитата:

Цитата lox-ness
Начало и конец - не изменяются »

Хорошо. Перефразирую — каким именно образом можно определить, что вот здесь вот — начало сообщения, а вот здесь вот — конец сообщения?

Цитата:

Цитата lox-ness
Этого не будет после изменения входных данных. »

Во втором выложенном Вами файле пустая строка по-прежнему есть.

lox-ness 07-03-2020 21:10 2912344

: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 2912360

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 2912374

Вы все правильно поняли. Спасибо Вам за терпение.

v79italya 08-03-2020 11:54 2912382

Вложений: 1
Указать путь к файлу и на таблице нажать Обновить

lox-ness 08-03-2020 16:59 2912406

Спасибо

DJ Mogarych 08-03-2020 21:27 2912435

Код:

$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 2912436

Только не UTF8. Там 1200/UTF-16LE.

DJ Mogarych 08-03-2020 21:42 2912438

:) Я только первое сообщение читал.


Время: 09:50.

Время: 09:50.
© OSzone.net 2001-