在 powershell 中转换数组的一部分
Converting Parts of an Array in powershell
我应该将此标记为家庭作业,但我不确定如何标记。不要求答案,只是指出我做错事的正确方向。基本上,这应该可以根据任何用户输入组成一个完整的句子,但 -AllCaps 除外,它运行正常。我的问题是另一部分。
param ($title, [switch]$AllCaps)
$ex="to|a|the|at|in|of|with|and|but|or"
function Proper($ts)
{
$nt=foreach($word in $ts)
{
$word=$word.ToLower()
if($word -match $ex)
{
if($word -eq $ts[0])
{
$letters=$word -csplit("")
$letters[1]=$letters[1].ToUpper()
$word=$letters -join("")
}
else
{
$word=$word
}
}
else
{
$letters=$word -csplit("")
$letters[1]=$letters[1].ToUpper()
$word=$letters -join("")
}
"$word"
}
$nt=$nt -join(" ")
Write-host $nt
}
if($AllCaps)
{
$title=$title.ToUpper()
"$title"
}
else
{
$ts=$title -split(" ")
$newtitle=Proper $ts
}
因此,当我执行传入 "the waffle of kings" 的脚本时,预期输出是 "The Waffle of Kings" - 相反,代码似乎完全忽略了第一个 [=20] 中的 "else" =] 语句,我得到的输出是 "The waffle of kings"。由于 "waffle" 不匹配 $ex 中的任何内容,它应该移动到 else 部分,将第一个字母大写。
不太值得注意的是,它不会在没有在 foreach 循环中包含“$word”的情况下写入控制台,尽管按照我编写的方式,Write-Host 应该为我这样做。如果我取出 write-host 没有任何变化,但如果我在循环中取出“$word”,我根本没有输出。
使用上面提到的
$ex='^(to|a|the|at|in|of|with|and|but|or)$'
我最终得到了一个很好的单行,但在这里扩展了它:
Function Proper($words)
{
$ex='^(to|a|the|at|in|of|with|and|but|or)$'
$nt = $(
foreach ($word in $words)
{
$word = $word.ToLower();
if ($word -match $ex)
{
$word
} else
{
$word = ([String]$word[0]).ToUpper()+$word.Substring(1);
$word
}
}
) -join " "
return $nt
}
希望对您有所帮助。
谢谢,克里斯。
我应该将此标记为家庭作业,但我不确定如何标记。不要求答案,只是指出我做错事的正确方向。基本上,这应该可以根据任何用户输入组成一个完整的句子,但 -AllCaps 除外,它运行正常。我的问题是另一部分。
param ($title, [switch]$AllCaps)
$ex="to|a|the|at|in|of|with|and|but|or"
function Proper($ts)
{
$nt=foreach($word in $ts)
{
$word=$word.ToLower()
if($word -match $ex)
{
if($word -eq $ts[0])
{
$letters=$word -csplit("")
$letters[1]=$letters[1].ToUpper()
$word=$letters -join("")
}
else
{
$word=$word
}
}
else
{
$letters=$word -csplit("")
$letters[1]=$letters[1].ToUpper()
$word=$letters -join("")
}
"$word"
}
$nt=$nt -join(" ")
Write-host $nt
}
if($AllCaps)
{
$title=$title.ToUpper()
"$title"
}
else
{
$ts=$title -split(" ")
$newtitle=Proper $ts
}
因此,当我执行传入 "the waffle of kings" 的脚本时,预期输出是 "The Waffle of Kings" - 相反,代码似乎完全忽略了第一个 [=20] 中的 "else" =] 语句,我得到的输出是 "The waffle of kings"。由于 "waffle" 不匹配 $ex 中的任何内容,它应该移动到 else 部分,将第一个字母大写。
不太值得注意的是,它不会在没有在 foreach 循环中包含“$word”的情况下写入控制台,尽管按照我编写的方式,Write-Host 应该为我这样做。如果我取出 write-host 没有任何变化,但如果我在循环中取出“$word”,我根本没有输出。
使用上面提到的
$ex='^(to|a|the|at|in|of|with|and|but|or)$'
我最终得到了一个很好的单行,但在这里扩展了它:
Function Proper($words)
{
$ex='^(to|a|the|at|in|of|with|and|but|or)$'
$nt = $(
foreach ($word in $words)
{
$word = $word.ToLower();
if ($word -match $ex)
{
$word
} else
{
$word = ([String]$word[0]).ToUpper()+$word.Substring(1);
$word
}
}
) -join " "
return $nt
}
希望对您有所帮助。
谢谢,克里斯。