Входные строки содержат фиксированную ширину в противоположность запятым отдельным значениям, поэтому вы не можете использовать разделитель (пробел) для анализа данных, которые могут содержать пустые значения. Вместо этого вы должны использовать положение значений в строке.
Вот пример строки, в которую я добавил индексную нумерацию выше:
012345678901234567890123456789012345678901234567890
Martin Corp 02 02 10 80 Langar
Вы можете заметить, что первое значение Martin
начинается со второго символа, номер индекса 1
и имеет длину не более 12 символов. Второе значение Corp
начинается с индекса 13
и имеет длину не более 11 символов, после чего начинается первое значение 02
и т. Д.
Мы используем substring(1,12)
, чтобы получить срез длиной 12 символов из строки, начинающейся с индекса 1
. Чтобы удалить (завершающий) пробел из строки, мы вызываем метод Trim()
.
Для создания нового объекта, содержащего данные каждой строки, мы используем [PSCustomObject]
и присваиваем имена свойствам объекта или заголовкам, если хотите. +=
оператор добавляет этот объект в массив.
test.txt
Bob 02 02 10 80 Enquiries
Martin Corp 02 02 10 80 Langar
Сценарий:
$array = @() # Create an empty array
Get-Content .\test.txt | foreach{ # Read test.txt file and handle each line with foreach
$array += [PSCustomObject]@{
Field1 = $_.substring(1,12).Trim();
Field2 = $_.substring(13,11).Trim();
Field3 = $_.substring(25,2).Trim();
Field4 = $_.substring(28,2).Trim();
Field5 = $_.substring(31,2).Trim();
Field6 = $_.substring(34,2).Trim();
Field7 = $_.substring(39); # Substring from index 39 to the end of line
}
}
$array
Чтобы вывести значения, каждое из которых находится в отдельной строке, вы можете сделать это, например, так:
$array | foreach{
$_.Field1
$_.Field2
$_.Field3
$_.Field4
$_.Field5
$_.Field6
$_.Field7
}