비어 있지 않거나 null이 아닌 요소를 배열로 선택하는 방법이 있습니까? 예를 들면 :
현재 csv : ( "___"는 ''와 같이 비어 있음을 나타냄)
Col1 Col2
1 "hello"
2 "adsf"
3 "hi"
__
__
내가 원하는 결과 :
$array = (1,2,3)
CSV 파일을 전체 메모리로 읽을 수있는 충분한 메모리가 있다고 가정하면 멤버 열거 를 PowerShell 비교 연산자의 배열 필터링 기능 ( -ne
이 경우) 과 결합 할 수 있습니다 .
# Simulate reading a CSV file into an array of $objects.
# (instead of: $objects = Import-Csv ...)
$objects =
@'
Col1,Col2
1,"hello"
2,"adsf"
3,"hi"
,"..."
,"..."
'@ | ConvertFrom-Csv
# .Col1 returns the "Col1" column values as an array,
# and -ne '' filters out the empty-string values.
$array = @($objects.Col1) -ne ''
노트 :
@()
상기 배열 표현식 연산자는 그 확인하는 데 사용되는 $objects.Col1
복귀에게 어레이 CSV 파일은 단지이 일어나는 경우에도, 값을 하나의 데이터 행.
좌변과 같은 배열로, -ne
A와 작용하는 필터 (라기보다는 복귀 $true
또는 $false
앤드 복귀) 서브 어레이 정합 소자 (빈 문자열 아닌 사람)의이. 결과도 단일 요소 LHS가있는 경우에도 배열입니다.
그렇지 않고 CSV 파일이 너무 커서 메모리 전체를 읽을 수없는 경우 파이프 라인 을 사용해야합니다 (속도가 느려짐).
[array] $array =
@'
Col1,Col2
1,"hello"
2,"adsf"
3,"hi"
,"..."
,"..."
'@ | ConvertFrom-Csv | ForEach-Object { if ('' -ne $_.Col1) { $_.Col1 } }
노트 :
[array]
은 파이프 라인에서 수집 된 출력이 하나의 값만 반환 되더라도 항상 배열로 처리되도록합니다 (대안은 전체 파이프 라인을에서 래핑하는 것입니다 @(...)
).이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다