我有很多重複的代碼,我想清理。我知道下面的語法是不正確的,但是你能讓我知道正確的方法嗎?比方說,我有以下代碼...如何通過函數參數傳遞csv列對象
Function GetColumnOneValues
{
Param ($csvFile, $ValuesWithoutNullFile)
Import-Csv $csvFile | Where-Object {$_.test1ColumnOne} |
Export-Csv $ValuesWithoutNullFile -NoTypeInformation -Force
}
Function GetColumnTwoValues
{
Param ($csvFile, $ValuesWithoutNullFile)
Import-Csv $csvFile | Where-Object {$_.test2ColumnTwo} |
Export-Csv $ValuesWithoutNullFile -NoTypeInformation -Force
}
Function GetColumnThreeValues
{
Param ($csvFile, $ValuesWithoutNullFile)
Import-Csv $csvFile | Where-Object {$_.test3ColumnThree} |
Export-Csv $ValuesWithoutNullFile -NoTypeInformation -Force
}
^注意重複代碼
Function Main
{
$test1CsvFile = "C:\Scripts\Tests\test1.csv"
$test1CsvFileResults = "C:\Scripts\Tests\test1Results.csv"
$test2CsvFile = "C:\Scripts\Tests\test2.csv"
$test2CsvFileResults = "C:\Scripts\Tests\test2Results.csv"
$test3CsvFile = "C:\Scripts\Tests\test3.csv"
$test3CsvFileResults = "C:\Scripts\Tests\test3Results.csv"
GetColumnOneValues $test1CsvFile $test1CsvFileResults
GetColumnTwoValues $test2CsvFile $test2CsvFileResults
GetColumnThreeValues $test3CsvFile $test3CsvFileResults
}
Main
相反,它應該是這樣的...
Function GetColumnValues
{
Param ($csvFile, $ValuesWithoutNullFile, $ColumnName)
Import-Csv $csvFile | Where-Object {$ColumnName} |
Export-Csv $ValuesWithoutNullFile -NoTypeInformation -Force
}
Function Main
{
$test1CsvFile = "C:\Scripts\Tests\test1.csv"
$test1CsvFileResults = "C:\Scripts\Tests\test1Results.csv"
$test2CsvFile = "C:\Scripts\Tests\test2.csv"
$test2CsvFileResults = "C:\Scripts\Tests\test2Results.csv"
$test3CsvFile = "C:\Scripts\Tests\test3.csv"
$test3CsvFileResults = "C:\Scripts\Tests\test3Results.csv"
$column1 = $_.test1ColumnOne
$column2 = $_.test2ColumnTwo
$column3 = $_.test3ColumnThree
GetColumnValues $test1CsvFile $test1CsvFileResults $column1
GetColumnValues $test2CsvFile $test2CsvFileResults $column2
GetColumnValues $test3CsvFile $test3CsvFileResults $column3
}
Main
然而,代替打印出非空值的函數,它會打印一個空白的csv文件。
使用這些CSV文件來測試代碼...
csvFile1 ...
test1ColumnOne,test1ColumnTwo,test1ColumnThree
qwer,,
,qwer,
,,qwer
csvFile2 ...
test2ColumnOne,test2ColumnTwo,test2ColumnThree
asdf,,
,asdf,
,,asdf
csvFile3 ...
test3ColumnOne,test3ColumnTwo,test3ColumnThree
zxcv,,
,zxcv,
,,zxcv
結果應該是...
test1Results.csv ...
"test1ColumnOne","test1ColumnTwo","test1ColumnThree"
"qwer","",""
test2Results.csv ...
"test2ColumnOne","test2ColumnTwo","test2ColumnThree"
"","asdf",""
test3Results.csv ...
"test3ColumnOne","test3ColumnTwo","test3ColumnThree"
"","","zxcv"
'(進口-CSV $文件)。 ColumnName' ....從某種意義上說是列對象。你想要名稱還是位置?你只想要值或對象列? – Matt
沒有「列對象」。 CSV值被讀入對象的屬性中,其中每個對象代表CSV的一行。你的代碼應該做什麼?你想刪除空字段的行嗎?在特定列中有空字段的行?僅提取一列並刪除空值? 「正確的語法」取決於期望的結果。 –
我更新了問題。讓我知道它是否仍然沒有意義。要回答你的問題,我的代碼應該做什麼,我有很多腳本利用這段代碼用於不同的目的。但代碼重複有點極端,我想知道是否有一種方法可以通過'$ _。name'作爲函數的參數。 –