在我见过的大多数代码中,Powershall 数组单元都是通过 $arrayName[1] 来访问的,也就是说,单元号是“硬编码”为数字的。我试过 $arrayName[$required_cell] ... 但它无法访问数据。
以下是我想做的事情。初始字符串:$k="012345xxxxxxyyyyyyABC123zzzzzztttttt" 通过 for 循环将其分成 6 组 6 个数字的数组
$tmp = Get-Content -Encoding UTF8 "$md\k" ($md is a path, 'k' is about 100 letters)
$k=$tmp.Substring(0,36)
for ($i = 0; $i -lt 36; $i += 6) {
$newstring+=$k.substring($i,6)
}
然后我访问第一个单元格,并将其分解成单独的数字
$tmp=$newstring[0]
$sp=$tmp.Split('')
user ## This a a function where I try to access $sp[3]
(我尝试使用 $sp=$tmp,但结果却出现了一个奇怪的序列,显示“ 0[]1[]2[]3[]4[]5”,** [] 是空格。查看 Format-Hex 后显示为“0\D\A1\D\A”等等。拆分至少会在每个单元格中创建一个数字)
理论是我可以使用这些数字来访问 newstring 数组,因此 $sp[3](包含数字 3)将允许我访问 $newstring 中的第三个单元格,即 $newstring[$sp[3]] 将返回“ABC123”
函数 user() 并不重要,因为其中没有任何内容可以起作用,因为它找不到这些代码;而 $newstring[3] 却可以正常工作!
第一个单元格中显示的六位数字是随机生成的,因此字符串中的数据会移动。例如,如果代码为“035241”,那么在 $sp[3] 处我们现在有“2”,因此数据现在位于单元格 2 中,即 035241xxxxxABC123tttttyyyyyzzzzz
所以问题是:您可以使用变量来访问数组的单元格数据,或者我应该使用其他方法(ArrayList?)
答案1
在空字符串上分割字符串将返回该字符串:
PS C:\>>'035241'.Split('')
035241
要获取字符数组,您需要使用强制转换:
PS C:\> [Char[]]'035241'
0
3
5
2
4
1
但是当我们尝试将它们用作数组的索引时,转换为 [Int] 会返回 ASCII 码:
PS C:\>>[Int[]][Char[]]'035241'
48
51
53
50
52
49
我们必须将 [Char] 数组转换为 [String] 数组,随后将其转换为 [Int] 即可按预期工作:
[Int[]][String[]][Char[]]'035241'
0
3
5
2
4
1
所以你想要这样的东西:
$NewString = @()
$k="012345xxxxxxyyyyyyABC123zzzzzztttttt"
for ($i = 0; $i -lt 36; $i += 6) {
$newstring+=$k.substring($i,6)
}
$tmp=$newstring[0]
$sp = [Int[]][String[]][Char[]]$tmp
$NewString[$sp[3]]