在 PowerShell 中将 csv 列中的所有值转换为整数(或删除前导零)

Convert all values in a csv column to integer (or remove leading zeroes) in PowerShell

我有一个包含 ID_code 列的 csv 文件,并且 ID 具有我想要删除的前导零。我发现如果将值转换为整数,前导零应该消失,但我不知道如何将其应用于整个 csv 中的所有值。这是我尝试过的,但生成的 csv 是空白的:

Import-Csv C:\folder\myFile.csv |
  ForEach-Object {
    $_.ID_code = [convert]::ToInt32($_.ID_code, 10)  } |

convertto-csv -NoTypeInformation | %{$_-替换 '"', ""} | 输出文件 C:\folder\myFile2.csv

您可以为此使用 calculated property。不过,您不需要解析该值。只需将其转换为 int 就足够了:

Import-Csv 'C:\path\to\input.csv' |
  select -Property @{n='ID_code';e={[int]$_.ID_code}},* -Exclude 'ID_code' |
  Export-Csv 'C:\path\to\output.csv'

另一种选择(因为您无论如何都要将数据导出回文本文件)只是从字符串值中删除前导零:

Import-Csv 'C:\path\to\input.csv' |
  select -Property @{n='ID_code';e={$_.ID_code -replace '^0+'}},* -Exclude 'ID_code' |
  Export-Csv 'C:\path\to\output.csv'

如果您知道 ID_code 列的位置,您甚至不需要导入 CSV。例如,如果该列是 CSV 中的第一列,您可以像这样进行替换:

(Get-Content 'C:\path\to\input.csv') -replace '^0+' |
  Set-Content 'C:\path\to\output.csv'