2016-02-05 2 views
0

У меня есть два вопроса, acually:Как сцепить массив целых чисел в разделенных запятыми

  1. Как присоединиться массив целых чисел в разделенных запятыми? (1,2,3) => "1,2,3"
  2. Как преобразовать массив целых чисел в массив строки? (1,2,3) => ("1", "2", "3")
$arraylist = New-Object 'system.collections.arraylist' 
$arraylist.Add(1); 
$arraylist.Add(2); 

$csv = ?? 
#($arraylist-join -',') returns error: Cannot convert value "," to type "System.Int32". Error: "Input string was not in a correct format." 
+1

удалите '-' перед правым аргументом' -join': '$ arraylist -join ','' –

+0

напишите как asnwer, пожалуйста, это сработало – Liero

+0

Я отправил ответ –

ответ

1

В вашем вопросе, вы закомментирована следующий фрагмент:

($arraylist-join -',') 

, потому что она возвращает ошибку Cannot convert value "," to type "System.Int32"...

Причина этого заключается в тире - перед ','.

В PowerShell, только операторы и параметры начинаются с тире, и так ',' не является ни (что это аргумент к оператору), анализатор PowerShell получает супер смущен и пытается лечить -',' как которое приведет к отрицательному числу.

Просто аннулированию тира, и вы будете в порядке:

$arraylist -join ',' 

Наконец, вы можете легко бросить массив целых чисел в массив строк с непроверенным оператором приведения -as (PowerShell 3.0 и выше):

$StringArray = 1,2,3,4,5 -as [string[]] 

или с помощью явного приведения (PowerShell 2.0-совместимый):

$StringArray = [string[]]@(1,2,3,4,5) 
-1

Я не, если это правильно. Обычно у них есть powershell2. Просто попробуйте немного.

$a = @() 
$strArrayNum="" 
for($i=0; $i -lt $arraylist.length; $i++){ 
    $strArrayNum += $element 
    $strArrayNum = $i+1 -eq $arraylist.length ? "" : "," 
} 

$a = $strArrayNum.Split(",") 
1

Это работает для меня:

[String]::Join(",", $arraylist.ToArray()) 

Я получил 1,2.

И тогда вторая часть:

foreach($number in $arraylist) { $number.ToString() } 
2

Следующий фрагмент кода может помочь в понимании:

$arraylist = New-Object 'system.collections.arraylist' 
$arraylist.Add(111)   | Out-Null 
$arraylist.Add([string]222) | Out-Null 
$arraylist.Add('"' + 3 + '"') | Out-Null 
for($i=0; $i -lt $arraylist.Count; $i++){ 
    write-host $i, $arraylist[$i], $arraylist[$i].GetType() 
} 
write-host '' 
$csv = $arraylist -join ',' 
$csv 

Выходной:

0 111 System.Int32 
1 222 System.String 
2 "3" System.String 

111,222,"3" 

Дополнительный вид (ип) важность " двойная кавычка s в строковом типе показывает следующие + операции (сумму целых чисел, но конкатенацию строк):

write-host $i, $arraylist[$i], $arraylist[$i].GetType().Name, ($arraylist[$i] + 55) 

дает следующий вывод:

0 111 Int32 166 
1 222 String 22255 
2 "3" String "3"55 

111,222,"3" 

Однако " двойные кавычки имеют еще одну важную и значимую роль в .csv файл при импорте, например на лист Excel.

Смежные вопросы