1.txt具有以下内容
abc12345
zyx98765
qwerty$%
我想要的输出
12345
98765
rty$%
Powershell Code
$data = get-content "1.txt"
$charcount = 5;
$output = @()
foreach($line in $data)
{
if ($line.length -gt 250){ $output += $line.substring($line.length-$charcount, $charcount) }
}
$output
没有输出。有什么想法吗?
答案 0 :(得分:0)
要让您的示例正常工作(输出最后5个字符/删除前3个字符),请使用以下代码
$charcount = 5
@'
abc12345
zyx98765
qwerty$%
'@ -split "\r*\n" | ForEach-Object { $_.Substring($_.Length-$charcount) }
让实际的例子正常工作
$charcount = 5
$output = @()
Get-Content "1.txt" | ForEach-Object {
if ($_.Length -gt 250) {
$output += $_.substring($_.length-$charcount, $charcount)
}
else {
$output+= $_ #append any line <= 250 chars
}
}
$charcount
答案 1 :(得分:0)
您的代码存在两个主要问题。
第一个是if
声明:
if($line.Length -gt 250) { ... }
您的示例字符串的长度都不超过250个字符,因此不会发生任何事情。
如果删除if
语句,最终会得到:
foreach($line in $data)
{
$output += $line.Substring($line.Length - $charcount, $charcount)
}
这对于您当前的示例非常有用,但如果您传入长度小于$charcount
个字符的字符串,则会遇到错误,因为$line.Length - $charcount
小于零。< / p>
你可以通过以下方式解决这个问题:
foreach($line in $data)
{
if($line -ge $charcount) {
$output += $line.Substring($line.Length - $charcount, $charcount)
} else {
# Line is less than $charcount long, return full string
$output += $line
}
}
或者,将suggested by PetSerAl复合成一个单一的陈述:
foreach($line in $data)
{
$output += $line.Substring([Math]::Max($line.Length - $charcount, 0))
}