[英]How to do I create a new array for each line in a file with Powershell?
我有一個 txt 文件,其當前 output 如下所示:
filetest.WIN.txt Wed Feb 10 12:00:37 2021
filetest.VID.avi Wed Feb 10 12:00:51 2021
我基本上需要每一行都是它自己的數組,每個項目由一個空格分隔以組成數組中的項目。 所以我可以對每一行的同一個數組項采取行動。
我已經嘗試過了,但是它將整個文件放入 1 個大數組中:
$arrayFromFile = Get-Content -Path $Path
$newArray =$arrayFromFile.Split(" ")
$newArray
但是那個 output 是這樣的:
filetest.WIN.txt
Wed
Feb
10
12:00:37
2021
filetest.VID.avi
Wed
Feb
10
12:00:51
2021
如果它更有效,我也願意接受其他方式。
繼續我的評論...
您的代碼行可以重構為此。
***筆記:
我正在使用 PowerShell 變量擠壓來同時分配給變量和 output。 這不是要求,只是一種選擇。***
($NewArray = (Get-Content -Path 'D:\Temp\FileData.txt').Split(''))
# Results
<#
filetest.WIN.txt
Wed
Feb
10
12:00:37
2021
filetest.VID.avi
Wed
Feb
10
12:00:51
2021
#>
正如我所說,這是一個數組,您可以通過這樣做來確定這一點
$NewArray.GetType()
# Results
<#
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True Object[] System.Array
#>
或者這樣做。
$NewArray[0]
# Results
<#
filetest.WIN.txt
#>
$NewArray[9]
# Results
<#
10
#>
或者這是你的用例......
# The default display
(
$NewDataObject = Import-Csv -Path 'D:\Temp\FileData.txt' -Delimiter ' ' -Header FileName,
DayName,
Month,
DayNumber,
Time,
Year
)
# Results
<#
FileName : filetest.WIN.txt
DayName : Wed
Month : Feb
DayNumber : 10
Time : 12:00:37
Year : 2021
FileName : filetest.VID.avi
DayName : Wed
Month : Feb
DayNumber : 10
Time : 12:00:51
Year : 2021
#>
# Or forced to display as a table.
(
$NewDataObject = Import-Csv -Path 'D:\Temp\FileData.txt' -Delimiter ' ' -Header FileName,
DayName,
Month,
DayNumber,
Time,
Year |
Format-Table -AutoSize
)
# Results
<#
FileName DayName Month DayNumber Time Year
-------- ------- ----- --------- ---- ----
filetest.WIN.txt Wed Feb 10 12:00:37 2021
filetest.VID.avi Wed Feb 10 12:00:51 2021
#>
所以本質上你想要將行變成對象的東西,你可以訪問類似的屬性? 像這樣的東西?
property1 property2 property3 property4 property5 property6
--------- --------- --------- --------- --------- ---------
filetest.WIN.txt Wed Feb 10 12:00:37 2021
filetest.VID.avi Wed Feb 10 12:00:51 2021
如果是這樣,這是代碼
$line1 = "filetest.WIN.txt Wed Feb 10 12:00:37 2021" -split " "
$line2 = "filetest.VID.avi Wed Feb 10 12:00:51 2021" -split " "
function ArrayToObject([string[]]$array) {
$count = $array.Count
if ($count) {
$object = [ordered]@{ }
foreach ($x in 1..$count) {
$object["property$x"] = $array[$x - 1]
}
[PSCustomObject]$object
}
}
$customObjectArray = @(
ArrayToObject $line1
ArrayToObject $line2
)
$customObjectArray | Format-Table
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.