如何使用 PowerShell 从 csv 中减去一个字符
How can subtract a character from csv using PowerShell
我正在尝试将我的 CSV 插入我的 SQL 服务器数据库,但只是想知道如何从 CSV GID 列中减去最后三个字符,然后将其分配给我的 $CSVHold1 变量。
我的 CSV 文件如下所示
GID Source Type Message Time
KLEMOE http://google.com Od Hello 12/22/2022
EEINGJ http://facebook.com Od hey 12/22/2022
基本上我只是试图从 GID 中获取前三个字符并将该值传递给我的 $CSVHold1 变量。
$CSVImport = Import-CSV $Global:ErrorReport
ForEach ($CSVLine1 in $CSVImport) {
$CSVHold1 = $CSVLine1.GID | ForEach-Object { $_.$GID = $_.$GID.subString(0, $_.$GID.Length - 3); $_ }
$CSVGID1 = $CSVLine1.GID
$CSVSource1 = $CSVLine1.Source
$CSVTYPE1 = $CSVLine1.TYPE
$CSVMessage1 = $CSVLine1.Message
}
我正尝试按照上面的方法进行操作,但由于某些原因我遇到了错误。
You cannot call a method on a null-valued expression.
您原来的第 3 行 was/is 语法无效,正如 Santiago 指出的那样。
$CSVHold1 = $CSVLine1.GID | ForEach-Object { $_.$GID = $_.$GID.subString(0, $_.$GID.Length - 3); $_ }
您正在呼叫 $_.$GID
但您想要 $_.GID
您也不需要将对象通过管道传送到循环中来实现您所要求的。
#!/usr/bin/env powershell
$csvimport = Import-Csv -Path $env:HOMEDRIVE\Powershell\TestCSVs\test1.csv
##$CSVImport = Import-CSV $Global:ErrorReport
ForEach ($CSVLine1 in $CSVImport) {
$CSVHold1 = $CSVLine1.GID.SubString(0, $CSVLine1.GID.Length - 3)
$CSVGID1 = $CSVLine1.GID
$CSVSource1 = $CSVLine1.Source
$CSVTYPE1 = $CSVLine1.TYPE
$CSVMessage1 = $CSVLine1.Message
Write-Output -InputObject ('Changing {0} to {1}' -f $CSVLine1.gid, $CSVHold1)
}
使用您的示例数据,以上输出:
C:> . 'C:\Powershell\Scripts\dchero.ps1'
Changing KLEMOE to KLE
Changing EEINGJ to EEI
最后,请注意,如果 $CSVLine1.GID
的长度小于 3,SubString
方法将失败。
我正在尝试将我的 CSV 插入我的 SQL 服务器数据库,但只是想知道如何从 CSV GID 列中减去最后三个字符,然后将其分配给我的 $CSVHold1 变量。
我的 CSV 文件如下所示
GID Source Type Message Time
KLEMOE http://google.com Od Hello 12/22/2022
EEINGJ http://facebook.com Od hey 12/22/2022
基本上我只是试图从 GID 中获取前三个字符并将该值传递给我的 $CSVHold1 变量。
$CSVImport = Import-CSV $Global:ErrorReport
ForEach ($CSVLine1 in $CSVImport) {
$CSVHold1 = $CSVLine1.GID | ForEach-Object { $_.$GID = $_.$GID.subString(0, $_.$GID.Length - 3); $_ }
$CSVGID1 = $CSVLine1.GID
$CSVSource1 = $CSVLine1.Source
$CSVTYPE1 = $CSVLine1.TYPE
$CSVMessage1 = $CSVLine1.Message
}
我正尝试按照上面的方法进行操作,但由于某些原因我遇到了错误。
You cannot call a method on a null-valued expression.
您原来的第 3 行 was/is 语法无效,正如 Santiago 指出的那样。
$CSVHold1 = $CSVLine1.GID | ForEach-Object { $_.$GID = $_.$GID.subString(0, $_.$GID.Length - 3); $_ }
您正在呼叫 $_.$GID
但您想要 $_.GID
您也不需要将对象通过管道传送到循环中来实现您所要求的。
#!/usr/bin/env powershell
$csvimport = Import-Csv -Path $env:HOMEDRIVE\Powershell\TestCSVs\test1.csv
##$CSVImport = Import-CSV $Global:ErrorReport
ForEach ($CSVLine1 in $CSVImport) {
$CSVHold1 = $CSVLine1.GID.SubString(0, $CSVLine1.GID.Length - 3)
$CSVGID1 = $CSVLine1.GID
$CSVSource1 = $CSVLine1.Source
$CSVTYPE1 = $CSVLine1.TYPE
$CSVMessage1 = $CSVLine1.Message
Write-Output -InputObject ('Changing {0} to {1}' -f $CSVLine1.gid, $CSVHold1)
}
使用您的示例数据,以上输出:
C:> . 'C:\Powershell\Scripts\dchero.ps1'
Changing KLEMOE to KLE
Changing EEINGJ to EEI
最后,请注意,如果 $CSVLine1.GID
的长度小于 3,SubString
方法将失败。