각 줄의 텍스트 파일을 파워셸을 통해 배열로 저장하는 방법
텍스트 파일이 있으면 C:\USER\Documents\Collection\collection.다음 정보를 가진 txt.
collectionA.json
collectionB.json
collectionC.json
collectionD.json
파워셸을 통해 텍스트 파일에 각 줄을 어떻게 배열의 요소로 저장할 수 있는지 궁금합니다.
array arrayFromFile = new Array;
foreach(line x in collection.txt)
{
arrayFromFile.Add(x);
}
...다음을 목표로 하고 있습니다.
foreach(string x in arrayFromFile)
{
newman run x;
}
보기에 쉬운 질문에 대해 사과드립니다. 저는 파워셸을 상대해 본 적이 없습니다.
Get-Content
명령어는 텍스트 파일의 각 줄을 별도의 문자열로 반환하므로 배열을 제공합니다(사용하지 않는 한).-Raw
parameter; 이는 모든 행이 하나의 문자열로 결합되도록 합니다.
[string[]]$arrayFromFile = Get-Content -Path 'C:\USER\Documents\Collections\collection.txt'
mklement0는 이 명령어를 호출할 때 실제로 무슨 일이 일어나고 있는지에 대해 훨씬 더 자세히 설명하고, 편리함보다 성능이 걱정되는 경우 대체 접근 방식을 제공합니다.만약 여러분이 단지 이 한 가지 요구 사항을 해결하는 것보다 언어에 대해 더 많이 배우고 싶다면 읽을 가치가 있습니다.
John Levan의 유용한 답변을 보완하기 위해:
Get-Content
Get-Content
cmdlet으로 개체를 파이프라인에 하나씩 출력합니다.(파이프 기호가 없는 상태에서 cmdlet을 호출하는 경우에도 파이프라인이 포함됩니다.|
, 후자는 여러 명령을 연쇄하기 위해 필요합니다).
이 경우 출력 개체는 입력 텍스트 파일의 개별 줄입니다.
다음과 같은 변수에 할당하여 파이프라인의 출력 개체를 수집하는 경우$arrayFromFile
또는 더 큰 표현의 맥락에서 파이프라인을 사용함으로써.(...)
:
- PowerShell은 여러 출력 개체를 자동으로 생성된 유형의 배열로 캡처합니다.
[object[]]
, - 출력 개체가 하나뿐인 경우 해당 개체는 배열 래퍼 없이 그대로 캡처됩니다.
그러나 대부분의 경우 PowerShell은 문장에서 스칼라(컬렉션이 아닌 단일 값)를 어레이(컬렉션)와 동일하게 취급하거나, 파이프라인에 열거할 값을 출력할 때 cmdlet을 통해 처리하는 등 많은 맥락에서 어레이(컬렉션)를 항상 수신해야 할 필요가 없습니다.lowing 명령은 입력 파일에 포함된 줄 수에 관계없이 잘 작동합니다.
# OK - read all lines, then process them one by one in the loop.
# (No strict need to collect the Get-Content output in a variable first.)
foreach ($line in Get-Content C:\USER\Documents\Collections\collection.txt) {
newman run $line
}
# Alternative, using the pipeline:
# Read line by line, and pass each through the pipeline, as it is being
# read, to the ForEach-Object cmdlet.
# Note the use of automatic variable $_ to refer to the line at hand.
Get-Content C:\USER\Documents\Collections\collection.txt |
ForEach-Object { newman run $_ }
PowerShell은 명령어의 출력이 항상 배열임을 보장하기 위해 단일 객체 출력도 배열로 감싸는 array-sub expression 연산자를 제공합니다.
따라서 PowerShell-diomatic 솔루션은 다음과 같습니다.
$arrayFromFile = @(Get-Content C:\USER\Documents\Collections\collection.txt)
MadTechnician은 에 대한 대안으로 파이프라인 출력을 캐스트/유형 제약하는 데 사용할 수도 있으며, 이를 통해 배열을 생성할 수도 있다고 지적합니다.
# Equivalent of the command above that additionally locks in the variable date type.
[array] $arrayFromFile = Get-Content C:\USER\Documents\Collections\collection.txt
사용함으로써[array] $arrayFromFile = ...
보다는$arrayFromFile = [array] (...)
,변수$arrayFromFile
는 유형 제한을 받게 되며, 이는 해당 데이터 유형이 잠겨 있음을 의미합니다(기본적으로 PowerShell에서는 언제든지 변수 유형을 변경할 수 있음).
[array]
존의 답변에 사용된 유형별 캐스트에 대한 명령 독립적인 대안입니다.[string[]]
; 후자를 사용하여 어레이의 요소 전체에 균일한 유형을 사용할 수도 있지만 PowerShell에서는[1] 이러한 유형을 사용할 필요가 없는 경우가 많습니다.
일반 PowerShell 어레이는 유형에 해당합니다.[object[]]
, 그것은 다른 유형의 요소들을 섞을 수 있게 해주지만, 어떤 주어진 요소는 여전히 특정한 유형을 가지고 있습니다; 예를 들어, 비록 유형이$arrayFromFile
위의 명령어는 다음과 같습니다.[object[]]
, 의 $arrayFromFile[0]
, 예를 들어, 첫번째 요소는[string]
(파일에 행이 1개 이상 포함되어 있는지 assuming하고, 다음과 같이 유형을 확인합니다.$arrayFromFile[0].GetType().Name
).
더 빠른 대안: 를 직접 사용합니다.NET 프레임워크
Cmdlet과 파이프라인은 표현력이 뛰어나고 편리하지만 속도가 느릴 수 있는 높은 수준의 메모리 저장 기능을 제공합니다.
성능이 중요할 때는 를 직접 사용합니다.이 경우와 같이 NET 프레임워크 유형이 필요합니다.
$arrayFromFile = [IO.File]::ReadAllLines('C:\USER\Documents\Collections\collection.txt')
어떻게 그 방법을 주목할 것인지.System.
접두사는 형식 이름에서 생략할 수 있습니다.
존의 대답처럼, 이것은 a를 돌려줄 것입니다.
[string[]]
배열해 놓은주의 사항:
상대 경로를 주의해야 합니다.NET에는 일반적으로 PowerShell과 다른 현재 디렉토리가 있습니다. 이 문제를 해결하려면 가장 간단한 경우에는 항상 절대 경로를 통과해야 합니다.
"$PWD/collection.txt"
그리고 가장 강력하게는
"$((Get-Location -PSProvider FileSystem).ProviderPath)/collection.txt"
.NET의 기본 인코딩은 UTF-8인 반면 Windows PowerShell의 기본 인코딩은 "ANSI" 인코딩, 즉 시스템 로케일의 레거시 코드 페이지입니다. 반면에 PowerShell Core(v6+) 역시 UTF-8로 기본 설정됩니다.
Get-Encoding
의-Encoding
매개변수 또는 그.ReadAllLines()
입력 파일의 문자 인코딩을 명시적으로 지정하기 위해 인코딩 인스턴스를 수락하는 오버로드입니다.
[1] 일반적으로 PowerShell의 암묵적인 런타임 유형 변환은 C#에서 얻을 수 있는 것과 같은 유형의 안전성을 제공할 수 없습니다.예.,[string[]] $a = 'one', 'two'; $a[0] = 42
오류가 발생하지 않음: PowerShell은 단순히 조용히 변환합니다.[int]
42
줄에 맞추어
$array = Get-Content -Path @("C:\tmp\sample.txt")
foreach($item in $array)
{
write-host $item
}
언급URL : https://stackoverflow.com/questions/52170699/how-to-save-each-line-of-text-file-as-array-through-powershell
'source' 카테고리의 다른 글
늘 레코드를 포함하는 왼쪽 조인 (0) | 2023.10.18 |
---|---|
Sqalchemy에서 열거를 하는 가장 좋은 방법은? (0) | 2023.10.18 |
jQuery를 사용하여 텍스트 정렬 스타일을 동적으로 추가하는 방법 (0) | 2023.10.18 |
스택 포인터 값 출력 (0) | 2023.10.18 |
Windows에서 MySQL Workbench가 열리지 않음 (0) | 2023.10.08 |