2017-09-05 66 views
0

一直在嘗試修改/刪除CSV文件中特定行(結果)中的數據爲特定長度。繼續得到「子串過載」。有任何想法嗎?Powershell子串設置特定單元格長度

$Csv = Import-Csv $FileIn 
$CsvNew = ForEach($Row in $Csv){ 
$Row.Results.Substring((0,[System.Math]::Min(254,$Row.Results.Length)))} 

回答

3

看起來像是你的Substring使用中的一個簡單的錯誤。 刪除括號中的一個。

來源:

$Row.Results.Substring((0,[System.Math]::Min(254,$Row.Results.Length)))} 

要:

$Row.Results.Substring(0,[System.Math]::Min(254,$Row.Results.Length))} 

對於可讀性的原因,你可能已經把你的子數到一個變量。錯誤會更加明顯。

$Csv = Import-Csv $FileIn 
$CsvNew = ForEach($Row in $Csv) 
{ 
    $MaxLength = [System.Math]::Min(254,$Row.Results.Length) 
    $Row.Results.Substring(0,$MaxLength) 
} 

編輯:

最後,請注意,$ CsvNew(我是從你的例子了)店沒什麼。 如果您想編輯CSV行內容,請改爲使用它。

$Csv = Import-Csv $FileIn 
$Csv | ForEach-Object { 
    $MaxLength = [System.Math]::Min(254,$_.Results.Length) 
    $_.Results.Substring(0,$MaxLength) 
} 

這最後一個片斷實際上編輯$的CSV變量的內容到結果列修剪到最多254個字符。 (它不會被導出到文件中,爲此,您需要使用ExportTo-CSV Cmdlet導出新的$ Csv內容)。

+0

謝謝!這確實解決了我的代碼。我想我仍然缺少這個標誌。輸出是: ' 結果字段輸入= sometext 輸出= 8 ' 我正在拍攝的東西,將限制領域的大小切斷額外的數據。例如,如果我將它設置爲4,那麼輸出=一些。 – user2542412

+0

看看我剛​​剛添加的最後一個片段。您需要通過管道來編輯$ Csv變量內容。最後一個例子實際上會修整該值,並直接對單元格進行修改。 –

+0

太棒了!謝謝! – user2542412

相關問題