따옴표로 구분된 문자열을 쉼표로 만드는 Powershell Array
쉼표로 구분된 문자열로 출력해야 하는 배열이 있지만 따옴표 "도 필요합니다.이것이 제가 가진 것입니다.
$myArray = "file1.csv","file2.csv"
$a = ($myArray -join ",")
$a
에 대한 출력$a
결국
file1.csv,file2.csv
제가 원하는 출력은
"file1.csv","file2.csv"
어떻게 하면 이것을 해낼 수 있을까요?
여기 있습니다.
[array]$myArray = '"file1.csv"','"file2.csv"'
[string]$a = $null
$a = $myArray -join ","
$a
출력:
"file1.csv","file2.csv"
당신은 탈출할 방법을 찾아야 합니다."
. 그래서 여러분들이 이걸 감싸서 할 수 있는 거죠.'
.
이 스레드가 오래된 것은 알지만 여기 다른 해결책이 있습니다.
$myArray = "file1.csv","file2.csv"
# Solution with single quote
$a = "'$($myArray -join "','")'"
$a
# Result = 'file1.csv','file2.csv'
# Solution with double quotes
$b = '"{0}"' -f ($myArray -join '","')
$b
# Result = "file1.csv","file2.csv"
PowerShell Core(현재 7.1)를 사용하는 경우 Join-String을 사용할 수 있습니다.
PowerShell 5.1에서는 사용할 수 없습니다.
$myArray | Join-String -DoubleQuote -Separator ','
출력:
"file1.csv","file2.csv"
한 줄 솔루션
내부에 배열 또는 목록이 있다고 가정할 경우$myArray
. 정의:
$myArray = @("one", "two")
다음 두 가지 솔루션이 있습니다.
큰따옴표( " )를 구분자로 사용:
'"{0}"' -f ($myArray -join '","')
출력:
"one","two"
작은 따옴표( ' )를 구분자로 사용:
"'{0}'" -f ($myArray -join "','")
출력:
'one','two'
여기 이전 방식의 PowerShell에서 작동하는 Join-String 방법이 있습니다.
function Join-String {
[CmdletBinding()]
Param(
[Parameter(Mandatory=$true,ValueFromPipeline=$true)] [string[]]$StringArray,
$Separator=",",
[switch]$DoubleQuote=$false
)
BEGIN{
$joinArray = [System.Collections.ArrayList]@()
}
PROCESS {
foreach ($astring in $StringArray) {
$joinArray.Add($astring) | Out-Null
}
}
END {
$Object = [PSCustomObject]@{}
$count = 0;
foreach ($aString in $joinArray) {
$name = "ieo_$($count)"
$Object | Add-Member -MemberType NoteProperty -Name $name -Value $aString;
$count = $count + 1;
}
$ObjectCsv = $Object | ConvertTo-Csv -NoTypeInformation -Delimiter $separator
$result = $ObjectCsv[1]
if (-not $DoubleQuote) {
$result = $result.Replace('","',",").TrimStart('"').TrimEnd('"')
}
return $result
}
}
어레이 매개 변수 또는 패스스루를 사용하여 호출할 수 있음
Join-String @("file1.txt","file2.txt","file3.txt") -DoubleQuote
출력:
"file1.txt","file2.txt","file3.txt"
또는 패스 루트로서:
@("file1.txt","file2.txt","file3.txt") | Join-String -DoubleQuote
출력:
"file1.txt","file2.txt","file3.txt"
생략 - 두 배 따옴표
@("file1.txt","file2.txt","file3.txt") | Join-String
출력:
file1.txt,file2.txt,file3.txt
또는 사용자 지정 구분자를 사용하여 세미콜론이라고 합니다.
@("file1.txt","file2.txt","file3.txt") | Join-String -DoubleQuote -Separator ";"
출력:
"file1.txt";"file2.txt";"file3.txt"
@Jason S의 답변에 약간만 더하면 캐리지 리턴(및 라인 피드 - Windows 등)이 추가됩니다.
$myArray | Join-String -DoubleQuote -Separator `r`n
그리고 쉼표와 함께:
$myArray | Join-String -DoubleQuote -Separator ",`r`n"
각 메서드에 대해 내장된 것을 사용하고 뒷따옴표를 사용하여 이중 따옴표를 제거하는 다른 방법이 있습니다.
$myarray = echo file1.csv file2.csv
$myarray.ForEach{"`"$_`""} -join ','
"file1.csv","file2.csv"
공백이 포함된 문자열만 이중으로 따옴표로 묶어야 했습니다.
$myArray = 'foo', 'b ar', "ba`tz"
$myArray -replace '.*\s.*', '"$0"' -join ','
출력:
foo,"b ar","ba z"
이는 RegEx 기반의 이점을 활용합니다.-replace
연산자는 LHS 피연산자로 배열을 취할 수 있습니다.이 경우 교체가 완료된 새 배열을 출력합니다.
RegEx 패턴.*\s.*
적어도 하나의 공백 문자를 포함하는 문자열과 일치합니다..*
빈 공간을 포함하는 경우 전체 입력 문자열이 일치하도록 주변 문자와 일치합니다.교체패턴"$0"
전체 매치를 인용합니다.일치하는 항목이 없으면 입력 문자열이 견적 없이 전달됩니다.
마침내.-join
따옴표로 묶습니다.
언급URL : https://stackoverflow.com/questions/39276437/powershell-array-to-comma-separated-string-with-quotes
'programing' 카테고리의 다른 글
SQL Server의 이미지 필드 컨텐츠 크기는 어떻게 됩니까? (0) | 2023.09.09 |
---|---|
Spring Data Jpa OneTo많은 사람들이 동시에 자식과 부모 개체를 저장합니까? (0) | 2023.09.09 |
트리거 최적화 (0) | 2023.09.09 |
Oracle에 대한 쿼리문 업데이트 (0) | 2023.09.09 |
문 계층 구조와 중첩됨 (0) | 2023.09.09 |