首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用powershell查找和替换出现在竖线分隔的csv文件中第n个位置的字符串

如何使用powershell查找和替换出现在竖线分隔的csv文件中第n个位置的字符串
EN

Stack Overflow用户
提问于 2020-05-27 22:41:41
回答 1查看 105关注 0票数 0

我有csv文件,其中包含以下样本的数据

MACADD||TEST|Street1|CITY||Taiwan|||10000000|||FIRE||Taiwan||||||||12天数||30 Days|DDTE||812148709231890||124-Taiwan|DENE|||

我想要替换每个csv文件中的第7个值,但问题是,当我替换它时,整个数据被逗号分隔,作为其中包含逗号的替换值。

有没有办法在替换发生后忽略/转义逗号,以便整个数据出现在最终csv文件的第一个单元格中。

代码语言:javascript
复制
$Files = Get-content -Path F:\Newfolder\*.csv

 $CountryCodeLookup = @{
    'USA'= 'United States'
    'Taiwan' = "Taiwan, Republic of China" # for this item csv file become strange
    'Delhi' = "Delhi, Capital of India, U.T" # for this item csv file become strange
    }

foreach ($File in $Files)
    {
    $DelimCount = ($File -replace '[^|]', '').Length
    $CSV_Thing = ConvertFrom-Csv -Delimiter '|' -InputObject $File -Header @(1..$DelimCount)

    If ($CountryCodeLookup.ContainsKey($CSV_Thing.7))    
    {
    $CSV_Thing.7 = $CountryCodeLookup[$CSV_Thing.7]
    }


    $OutString = (($CSV_Thing |
        ConvertTo-Csv -Delimiter '|' -NoTypeInformation |
        Select-Object -Skip 1) -replace '"', '') + '|' | Set-Content $File.PSPath -Force

    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-28 21:09:18

代码语言:javascript
复制
$Files = Get-content -Path F:\Newfolder\*.txt
$Path = "F:\Newfolder"

 $CountryCodeLookup = @{
    'USA'= 'United States'
    'Taiwan' = "Taiwan, Republic of China" # for this item csv file become strange
    'Delhi' = "Delhi, Capital of India, U.T" # for this item csv file become strange
    }

foreach ($File in $Files)
    {
    $DelimCount = ($File -replace '[^|]', '').Length
    $CSV_Thing = ConvertFrom-Csv -Delimiter '|' -InputObject $File -Header @(1..$DelimCount)

    If ($CountryCodeLookup.ContainsKey($CSV_Thing.7))    
    {
    $CSV_Thing.7 = $CountryCodeLookup[$CSV_Thing.7]
    }


    $OutString = (($CSV_Thing |
        ConvertTo-Csv -Delimiter '|' -NoTypeInformation |
        Select-Object -Skip 1) -replace '"', '') + '|' | Set-Content $File.PSPath -Force

    }


    $files = Get-ChildItem $Path | where { ! $_.PSIsContainer }
foreach ($file in $files){
    $newFileName = ($file.Fullname) -Replace ".txt",".csv"
    Get-Content $file.FullName | Out-File $newFileName
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62045851

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档