3
我有需要根據CSV中提供的映射修改的文件。我想讀取我的txt文件的每一行,並根據指定的值存在,我想根據我的CSV文件(映射)替換該行中的其他字符串。爲此,我使用了HashTable。這是我PS的腳本:powershell:使用散列表替換字符串
$file ="path\map.csv"
$mapping = Import-CSV $file -Encoding UTF8 -Delimiter ";"
$table = $mapping | Group-Object -AsHashTable -AsString -Property Name
$original_file = "path\input.txt"
$destination_file = "path\output.txt"
$content = Get-Content $original_file
foreach ($line in $content){
foreach ($e in $table.GetEnumerator()) {
if ($line -like "$($e.Name)") {
$line = $line -replace $e.Values.old_category, $e.Values.new_category
$line = $line -replace $e.Values.old_type, $e.Values.new_type
}
}
}
Set-Content -Path $destination_file -Value $content
我map.csv如下所示:
Name;new_category;new_type;old_category;old_type
alfa;new_category1;new_type1;old_category1;old_type1
beta;new_category2;new_type2;old_category2;old_type2
gamma;new_category3;new_type3;old_category3;old_type3
而且我input.txt中內容是:
bla bla "bla"
buuu buuu 123456 "test"
"gamma" "old_category3" "old_type3"
alfa
當我運行此腳本它創建與初始文件完全一樣的輸出。有人能告訴我爲什麼它根據我的映射沒有改變「gamma」出現的那一行嗎?
在此先感謝
工作就像一個魅力。非常感謝 :) – MacieQ