簡體   English   中英

創建並顯示一個 powershell object,其中 2 列 15 行來自 file.txt

[英]create and display a powershell object with 2 columns with 15 lines from a file .txt

我想創建並顯示一個 powershell object 具有兩列(兩個屬性: npdate ),來自文件“test.txt”的 15 行。

1   21/05/20
2   21/05/20
3   21/05/20
4   21/05/20
5   21/05/20
6   21/05/20
7   21/05/20
8   21/05/20
9   21/05/20
10  21/05/20
11  21/05/20
12  21/05/20
13  21/05/20
14  21/05/20
15  21/05/20

這是我的代碼:

$path1="C:\content1\test.txt"
$tableau = Get-Content $path1

Foreach($valeur in $tableau) {
    # trim spaces at beginning and end
    
    $valeur = $valeur.trim() 
    
    # insert , at specific places for ConvertFrom-CSV command
    
    $valeur = $valeur.insert(2,",")
    
    $valeur = $valeur -replace "\s+",""
    $Object = $valeur | ConvertFrom-Csv -Header 'np', 'date'      
}  

$Object

我的代碼的 output 是:

np date
-- ----
15 21/05/20

我的 object $Object只有最后一行,而我想要 my.txt 文件的 15 行。

在 foreach 循環的每一輪中,您都設置$Object ,從而覆蓋了先前的值。

移動循環內的最后一行,您將獲得值。

$path1="C:\content1\test.txt"
$tableau =Get-Content $path1

Foreach($valeur in $tableau){ # trim spaces at beginning and end

$valeur= $valeur.trim() 
 
# insert , at specific places for ConvertFrom-CSV command

$valeur=$valeur.insert(2,",")
  
  $valeur=$valeur -replace "\s+",""
  $Object =$valeur | ConvertFrom-Csv -Header 'np', 'date'
$Object
} 

您可以直接將foreach的 output 分配給變量$object ,如下所示:

$path1="C:\content1\test.txt"
$tableau = Get-Content $path1

$object = Foreach($valeur in $tableau) {
    # trim spaces at beginning and end
    
    $valeur = $valeur.trim() 
    
    # insert , at specific places for ConvertFrom-CSV command
    
    $valeur = $valeur.insert(2,",")
    
    $valeur = $valeur -replace "\s+",""
    $valeur | ConvertFrom-Csv -Header 'np', 'date'      
}  

看起來很奇怪,但它是 PowerShell 中的常見模式(例如,您也可以從其他控制塊的 output 分配,如ifswitch )。

這類似於將管道的 output 分配給變量。 ConvertFrom-Csv的 output 被自動捕獲並添加到 PowerShell 構建並最終分配給$object的數組中。

就這點怎么樣...

$RecordList = (Get-Content 'D:\Temp\TestFile.txt'| 
Select-Object -First 16) -replace "\s+","," | 
ConvertFrom-Csv -Header np, date
# Results
<#
np date    
-- ----    
1  21/05/20
2  21/05/20
3  21/05/20
...
#>

 $RecordList.np
# Results
<#
1
2
3
...
#>

 $RecordList.date
 # Results
<#
21/05/20
21/05/20
21/05/20
...
#>

Or

(Get-Content 'D:\Temp\TestFile.txt'| 
Select-Object -First 16) -replace "\s+","," | 
ForEach {
    [pscustomobject]@{
        np   = ($PSItem -split ',')[0]
        date = ($PSItem -split ',')[1]
    }

}
# Results
<#
np date    
-- ----    
1  21/05/20
2  21/05/20
3  21/05/20
...
#>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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