powershell - 如何防止随机输出?
问题描述
当我运行我的脚本时,它会添加一个我没有请求的输出。
$input = Read-Host -p "Message?";
$morseFile = Get-Content C:\Users\lukas.downes\Documents\Script\morse.csv
$letter;
$code;
$outputAsString = "";
for ($j = 0; $j -lt $input.Length; $j++)
{
for ($i = 1; $i -lt $morseFile.Length; $i++)
{
$letter = ([string]$morseFile[$i]).Split(',')[0];
$code = ([string]$morseFile[$i]).Split(',')[1];
if ($input[$j] -eq $letter)
{
$outputAsString += $code;
write-host ("" + $letter + ": " + $code)
}
}
}
Write-Host $outputAsString
这输出:
> Message?: sos
> Z
> --..
> S: ...
> O: ---
> S: ...
> ...---...
这很奇怪,因为我什至没有在我的脚本中使用“Z”。
解决方案
如果您的输入 csvmorse.csv
看起来像这样:
Letter,Code
O,---
P,.--.
Q,--.-
R,.-.
S,...
那么这应该适合你:
# import the csv as array of objects
$codes = Import-Csv -Path 'C:\Users\lukas.downes\Documents\Script\morse.csv'
# for more speed, change this array of objects into a lookup Hashtable
$morse = @{}
foreach ($item in $codes) {
$morse[$item.Letter] = $item.Code
}
$inputString = Read-Host -p "Message?"
if (![string]::IsNullOrWhiteSpace($inputString)) {
$inputString.ToUpper().ToCharArray() | ForEach-Object {
'{0}: {1}' -f $_, $morse[$_.ToString()] # or: $morse["$_"]
}
}
输入“sos”时,输出为:
S: ...
O: ---
S: ...
PS 不要$input
用作自定义变量,因为它是自动变量
推荐阅读
- android - 背景大时模拟低内存异常
- php - 如何为不同的行获得不同的总和值
- c - 带有 Frama-c 的 RTE 插件:无法识别“-rte-unsigned-ov”
- r - 如何使用 for 循环在数据框中的两列中选择值以产生新的输出
- php - 为什么将 null 添加到 echo 输出?
- javascript - 弹拨功能组成
- android - 如何在 FirebaseRecyclerOptions 中过滤数据
- java - 如何在不同服务器上平衡 Spring UsernamePasswordAuthenticationFilter
- c# - 如何在 C# 中创建不同的 Json
- python - 在 QLineEdit 和 QComboBox 中以编程方式撤消和重做