PowerShell – CSV (가져 오기 / 내보내기)로 따옴표가 제거됨


1

다음과 비슷한 내용의 탭으로 구분 된 CSV 파일 (test.txt)이 있습니다 (CSV에는 헤더가 없습니다).

12.33   Apple   Orange  "this is" great "to eat"
10.99   Pear    Lemon   "this" is an - "aquired taste"

데이터를 배열로 가져 오기 위해 다음 두 가지를 모두 시도했습니다.

$Headers = "price","item1","item2","desc"
[array]$arrCSVobjects = import-csv "test.txt" -Delimiter "`t" -Header $Headers

(또는)

$Headers = "price","item1","item2","desc"
[array]$arrCSVobjects = Get-Content -Path "test.txt " | Out-String | ConvertFrom-CSV -Delimiter "`t" -Header $Headers

내가 어떻게 접근하든 PS는 배열의 DESC 요소에서 시작 (인용) 따옴표를 계속 제거하려고합니다 (원래 데이터와 같지 않은 다음과 같은 결과가 나타납니다).

price    item1    item2    desc
-----    -----    -----    ----
12.33    Apple    Orange   this is great "to eat"
10.99    Pear     Lemon    this is an - "aquired taste"

원래 데이터와 비교할 때 일부 따옴표가 누락되었음을 알 수 있습니다. PS가 이와 같은 요소에서 따옴표를 제거하지 못하게하려면 어떻게해야합니까? CSV를 가져 와서 데이터를 조작 한 다음 다른 CSV로 다시 내 보내야합니다. 인터넷에서 답을 찾을 때마다 따옴표를 제거하는 방법에 대한 결과가 계속 표시되지만 어떻게 유지해야하는지 알 수 없습니다. 가져 오기 또는 내보내기 프로세스에서 따옴표를 제거하고 싶지 않습니다.

미리 감사드립니다.

STGdb


그 인용문은 실제로 필요한가? 결국 그들은 아마도 그것이 전체적인 주장이라는 것을 표시하기 위해 거기에있을 desc것입니다.
Seth

이해하지만 따옴표는 필요합니다. 내가 원래 게시 한 것은 유사한 CSV 형식을 사용한 예일뿐입니다. 시나리오는 "desc"요소에 편집자 의견과 함께 인용 된 단어가 포함되어 있다는 것입니다. ). 따라서이 예에서는 음성 설명과 편집 의견을 구분하기 위해 따옴표가 필요합니다. 그러나 좋은 지적-감사합니다
STGdb

답변:


3

파일이 유효한 CSV가 아닙니다. (공식 표준은 없지만 사실상 표준이 있습니다.) 큰 따옴표는 CSV에서 주변 필드에 특별한 의미가 있습니다. "서 라운더"가 아닌 것은 보통 다음과 같이 두 배로 사용하여 탈출해야합니다.

12.33   Apple   Orange  """this is"" great ""to eat"""

또한 전체 필드를 큰 따옴표로 묶어야합니다. 그렇지 않으면 파서가 혼동됩니다. 그래서이 필드는 세 개의 큰 따옴표로 시작하고 끝납니다.

파일 형식을 변경할 수없는 경우 탭에서 분할하여 파일을 직접 구문 분석 할 수 있습니다. 이것은 실제 필드 안에 탭이 없다는 것을 보장 할 수있는 경우에만 작동합니다. 탭은 필드 구분 기호로만 사용해야합니다.

gc .\test.txt | 
    % { $f = $_ -split "`t"; [pscustomobject]@{price=$f[0];item1=$f[1];item2=$f[2];desc=$f[3]} }

산출:

price item1 item2  desc
----- ----- -----  ----
12.33 Apple Orange "this is" great "to eat"
10.99 Pear  Lemon  "this" is an - "aquired taste"

1
완벽하게 작동합니다-감사합니다. 정확히 내가 필요로했지만 원래 시도했을 때 어떤 이유로 든 적절한 분할 구문을 알아낼 수 없었습니다. 대박 !!
STGdb
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.