我有這個回圈:
foreach($line in Get-Content .\script2.csv)
{ $firstname = $line.split(';')[0]
$lastname = $line.split(';')[1]
$email = $line.split(';')[2]
$newLine = """$firstname"",""$lastname"",""$email"""
$newLine >> newCSV.csv }
我想添加一個特定的標題,但我不知道應該在我的小腳本中在哪里寫“-header”。
謝謝
編輯 :
我有一個這樣的檔案:
A;B;C
A;B;C
A;B;C
A;B;C
我需要這個:
"info1","info2","info3",...,"info18"
"A","B",C","","","","","","","","","","","","","","",""
"A","B",C","","","","","","","","","","","","","","",""
"A","B",C","","","","","","","","","","","","","","",""
"A","B",C","","","","","","","","","","","","","","",""
uj5u.com熱心網友回復:
正如我所評論的,這可以在沒有回圈的情況下簡單地完成:
您輸入的 CSV (script2.csv)
A;B;C
A;B;C
A;B;C
A;B;C
# get objects from the input csv file and provide headers for the data
# then save this data with the default delimiter comma to a new file
Import-Csv -Path '.\script2.csv' -Delimiter ';' -Header 'info1','info2','info3','info4','info5' |
Export-Csv -Path '.\newCsv.csv' -NoTypeInformation
會給你一個新檔案“newCsv.csv”,如下所示:
"info1","info2","info3","info4","info5"
"A","B","C",,
"A","B","C",,
"A","B","C",,
"A","B","C",,
如果您需要更多的欄位,您可以簡單地創建一個字串陣列來保存所有想要的標題并使用它。
就像是
$header = 1..18 | ForEach-Object {"info$_"}
Import-Csv -Path '.\script2.csv' -Delimiter ';' -Header $header |
Export-Csv -Path '.\newCsv.csv' -NoTypeInformation
這將使用以下內容保存 newCsv.csv:
"info1","info2","info3","info4","info5","info6","info7","info8","info9","info10","info11","info12","info13","info14","info15","info16","info17","info18"
"A","B","C",,,,,,,,,,,,,,,
"A","B","C",,,,,,,,,,,,,,,
"A","B","C",,,,,,,,,,,,,,,
"A","B","C",,,,,,,,,,,,,,,
任何讀取此類檔案的軟體都應該能夠處理空欄位,因為絕對沒有理由填充這些""欄位以表示該欄位為空。無論如何,讀取/匯入 CSV 應該始終以字串形式回傳值,就像 Import-Csv 那樣.
- Import-Csv根據分隔符分隔值檔案中的專案創建類似表格的自定義物件。通常這個分隔符是逗號,因此擴展名逗號分隔值(.csv)
- Export-Csv將物件轉換為一系列分隔符分隔值 (CSV) 字串并將這些字串保存到檔案中。
- Get-Content獲取文本檔案的內容并回傳一個字串陣列,其中的行在 NewLine 字符上被拆分。向此 cmdlet
添加 switch 時-Raw,它會將檔案內容作為包含 NewLine 字符的單個多行字串回傳。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/342626.html
