簡體   English   中英

如何使用 Powershell 為文件中的每一行創建一個新數組?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM