Powershell-从数组中的每个字符串获取变量
基本上,我试图实现的是Powershell-从数组中的每个字符串获取变量,powershell,Powershell,基本上,我试图实现的是foreachcharacter in$IDNumber它将沿着$number9prt1的行吐出一个字符串,并将其放入数组,然后移动到$IDNumber中的下一个字符,依此类推 完成后,我希望数组中的foreachstring获取每个字符串的变量 第一个示例将查看变量$Number9Prt1然后$Number8Prt1然后$Number7Prt1 简单地说,我有一个数组,它的值如下Number9Prt1然后Number8Prt1然后Number7Prt1。是否有一种方法可以
foreach
character in$IDNumber
它将沿着$number9prt1
的行吐出一个字符串,并将其放入数组,然后移动到$IDNumber
中的下一个字符,依此类推
完成后,我希望数组中的foreach
string获取每个字符串的变量
第一个示例将查看变量$Number9Prt1
然后$Number8Prt1
然后$Number7Prt1
简单地说,我有一个数组,它的值如下Number9Prt1
然后Number8Prt1
然后Number7Prt1
。是否有一种方法可以从数组中获取值,将其转换为变量,从变量中获取字符串并将其放入数组中。
我已经试了好几天了,但是运气不好。。。任何帮助都将不胜感激
多谢各位
新手程序员,卢克
原因:我在我的工作场所使用控制台窗口作为一种“GUI”,拥有更大的文本会很有帮助。我个人只会使用数组。数组的每个索引都可以表示数字:
$Number1Prt2 = "#### "
$Number1Prt3 = " ## "
$Number1Prt4 = " ## "
$Number1Prt5 = " ## "
$Number1Prt6 = " ## "
$Number1Prt7 = "###### "
$Number2Prt1 = " ####### "
$Number2Prt2 = "## ## "
$Number2Prt3 = " ## "
$Number2Prt4 = " ####### "
$Number2Prt5 = "## "
$Number2Prt6 = "## "
$Number2Prt7 = "######### "
$Number3Prt1 = " ####### "
$Number3Prt2 = "## ## "
$Number3Prt3 = " ## "
$Number3Prt4 = " ####### "
$Number3Prt5 = " ## "
$Number3Prt6 = "## ## "
$Number3Prt7 = " ####### "
$Number4Prt1 = "## "
$Number4Prt2 = "## ## "
$Number4Prt3 = "## ## "
$Number4Prt4 = "## ## "
$Number4Prt5 = "######### "
$Number4Prt6 = " ## "
$Number4Prt7 = " ## "
$Number5Prt1 = "######## "
$Number5Prt2 = "## "
$Number5Prt3 = "## "
$Number5Prt4 = "####### "
$Number5Prt5 = " ## "
$Number5Prt6 = "## ## "
$Number5Prt7 = " ###### "
$Number6Prt1 = " ####### "
$Number6Prt2 = "## ## "
$Number6Prt3 = "## "
$Number6Prt4 = "######## "
$Number6Prt5 = "## ## "
$Number6Prt6 = "## ## "
$Number6Prt7 = " ####### "
$Number7Prt1 = "######## "
$Number7Prt2 = "## ## "
$Number7Prt3 = " ## "
$Number7Prt4 = " ## "
$Number7Prt5 = " ## "
$Number7Prt6 = " ## "
$Number7Prt7 = " ## "
$Number8Prt1 = " ####### "
$Number8Prt2 = "## ## "
$Number8Prt3 = "## ## "
$Number8Prt4 = " ####### "
$Number8Prt5 = "## ## "
$Number8Prt6 = "## ## "
$Number8Prt7 = " ####### "
$Number9Prt1 = " ####### "
$Number9Prt2 = "## ## "
$Number9Prt3 = "## ## "
$Number9Prt4 = " ######## "
$Number9Prt5 = " ## "
$Number9Prt6 = "## ## "
$Number9Prt7 = " ####### "
$Number0Prt1 = " ##### "
$Number0Prt2 = " ## ## "
$Number0Prt3 = "## ## "
$Number0Prt4 = "## ## "
$Number0Prt5 = "## ## "
$Number0Prt6 = " ## ## "
$Number0Prt7 = " ##### "
$IDNumber = "9873453"
$CharArray =$IDNumber.ToCharArray()
#Creating variables
foreach ($CharArray in [char[]]$CharArray) { $NumberArray += ("$"+"Number"+$CharArray+"Prt"+"1")}
说明:
$Numbers
是一个数组,其中每个索引都包含一个表示数字图形的数组。因此,$Numbers['0']
包含组成0
图形的数组元素,$Numbers['1']
包含组成1
图形的数组元素,等等。现在您只需要检索包含目标图形的$Numbers
索引
如果shell中的视觉表示对您很重要,您仍然可以保持:
# For simplicity, I only created 0,1,2,3 indices.
# Each index number matches the graphical number it stores.
$Numbers = @(" ##### "," ## ## ","## ## ","## ## ","## ## "," ## ## "," ##### "),
@("#### "," ## "," ## "," ## "," ## "," ## ","###### "),
@(" ####### ","## ## "," ## "," ####### ","## ","## ","######### "),
@(" ####### ","## ## "," ## "," ####### "," ## ","## ## "," ####### ")
$IDNumbers = '20012'
$IDNumbers.ToCharArray() | Foreach-Object { $Numbers["$_"] }
# Output
#######
## ##
##
#######
##
##
#########
#####
## ##
## ##
## ##
## ##
## ##
#####
#####
## ##
## ##
## ##
## ##
## ##
#####
####
##
##
##
##
##
######
#######
## ##
##
#######
##
##
#########
您可以基于此方法进行水平显示:
$Numbers = @(
" ##### ",
" ## ## ",
"## ## ",
"## ## ",
"## ## ",
" ## ## ",
" ##### "
),
@(
"#### ",
" ## ",
" ## ",
" ## ",
" ## ",
" ## ",
"###### "
),
@(
" ####### ",
"## ## ",
" ## ",
" ####### ",
"## ",
"## ",
"######### "
),
@(
" ####### ",
"## ## ",
" ## ",
" ####### ",
" ## ",
"## ## ",
" ####### "
)
您只需将连接字符(此处的选项卡)更改为任意一个或一组字符即可。因为每个图形有7个部分,所以可以循环遍历每个部分(索引0-6)。由于我们将每个部分创建为数组的一个元素,因此您拥有一个嵌套数组数组。因此,图形0
第1部分将是$Numbers['0'][0]
,图形3
第4部分将是$Numbers['3'][3]
编辑:使用字母和数字 您可以使用哈希表而不是数组来保存图形。然后可以通过哈希表键访问每个图形数组
$Numbers = @(" ##### "," ## ## ","## ## ","## ## ","## ## "," ## ## "," ##### "),
@("#### "," ## "," ## "," ## "," ## "," ## ","###### "),
@(" ####### ","## ## "," ## "," ####### ","## ","## ","######### "),
@(" ####### ","## ## "," ## "," ####### "," ## ","## ## "," ####### ")
$IDNumbers = '20012'
for ($i = 0; $i -lt 7; $i++) {
($IDNumbers.ToCharArray() | Foreach-Object { $Numbers["$_"][$i] }) -join "`t"
}
这太棒了,别误会我的意思,我这么做是为了让变量排成一行,然后水平显示。但我非常感谢您的回答。我添加了如何在创建变量时使其显示在shell中。在shell中,它们如何显示并不真正困扰我,但在控制台窗口中,我试图使它们水平显示。在代码中,我抓取值的顶行,添加一个
'n
,然后创建一个循环,移动到第二行,然后是第三行。。。。。然后水平显示人物。我添加了一种水平显示的方式。这就是巫术。完美的非常感谢您首先,您使用chararray变量作为迭代变量,而它应该只是char数组。将其更改为foreach($chararray中的char){…使用$char做点什么…}第二,您可以简单地增加控制台的字体大小,为什么要这样做呢?第三,您不希望将$作为变量名的一部分。我将尝试第一个变量,我不是管理员,因此无法保存任何系统更改,但由于某些原因,当计算机重新启动时,所有值都会返回默认值。只是好奇而已。[原因:我在我的工作场所使用控制台窗口作为一种“GUI”,拥有更大的文本会很有帮助。]为什么?仅使用内置GUI功能的Verses Powershell就可以通过say和消息框为您提供帮助?从GUI,特别是人类可访问性(屏幕阅读器、屏幕分辨率等)用例。你的方法将是一个真正的问题。
$hash = [ordered]@{}
$hash['A'] = @(' #### ',' ## ## ',' ## ## ',' ########## ',' ## ## ',' ## ## ','## ##')
$hash['0'] = @(" ##### "," ## ## ","## ## ","## ## ","## ## "," ## ## "," ##### ")
$hash['1'] = @("#### "," ## "," ## "," ## "," ## "," ## ","###### ")
$hash['2'] = @(" ####### ","## ## "," ## "," ####### ","## ","## ","######### ")
$hash['3'] = @(" ####### ","## ## "," ## "," ####### "," ## ","## ## "," ####### ")
$IDNumbers = 'A23012'
for ($i = 0; $i -lt 7; $i++) {
($IDNumbers.ToCharArray() | Foreach-Object { $hash["$_"][$i] }) -join "`t"
}