간단한 CSV / DSV 임포터


12

이것 의 반대보다 약간 더 .

에서 :  다중 행 DSV 데이터 및 단일 구분 문자. DSV는 파일, 파일 이름, 줄 바꿈으로 구분 된 문자열, 문자열 목록 등으로 사용할 수 있습니다. 모든 레코드의 필드 수는 동일하며 필드는 비어 있지 않습니다. 데이터에 구분 문자가 없으며 인용 또는 이스케이프 메커니즘이 없습니다.

Out :  DSV를 나타내는 데이터 구조 (예 : 문자열 목록 또는 문자열 매트릭스).

["here is,some,sample","data,delimited,by commas"]그리고 ",":
[["here is","some","sample"],["data","delimited","by commas"]]

["hello;\"","\";world","\";\""]and ";":
[["hello","\""],["\"","world"],["\"","\""]](이 예제는 JSON을 사용하므로 이스케이프 처리)

["to be or not","that is the question"]그리고 " ":
[["to","be","or","not"],["that","is","the","question"]]


명확히하기 위해 주어진 문자의 인스턴스에서 각 항목을 간단히 분할합니까?
ETHproductions

@ETHproductions 맞습니다.
Adám

첫 번째 또는 마지막 문자가 구분 기호 인 경우 어떻게 문자열을 분할해야합니까? ",for,example,this,string,"
GB

@GB 필드가 비어 있지 않음
Adám

그렇게되지 않을 것이라고 생각할 수 있습니까?
GB

답변:


3

젤리 , 3 2 바이트

데니스는 지적 2 바이트 솔루션을하지 작업 자체가하는 이항 링크하고 있음을 나타납니다 동안 실제로 방식으로 명령 행 인수가 그렇게 보이게하는 구문 분석입니다.

ṣ€

온라인으로 사용해보십시오! -바닥 글은 왼쪽과 오른쪽이 명시 적으로 설정된 함수를 호출하고 그리드 *로 형식을 지정합니다.

오른쪽 인수와 동일한 하위 목록이 아닌 오른쪽 인수가 발생할 때 분할되는 것을 제외하고는 정확히 다음과 같습니다 .


œṣ€

3 개 byter - 바닥 글 표시 그리드 * 같은 결과.

왼쪽의 DSV 목록과 오른쪽의 구분 기호를 가져 오는 2 진 링크 (기능).

어떻게?

œṣ€ - Main link: list l, delimiter d
  € - for each item in l:
œṣ  -     split at occurrences of sublists equal to d

* 전체 프로그램으로서 암시 적 출력은 단순히 모든 문자를 "밀어 넣습니다". 따라서 TIO 링크의 바닥 글은 링크를 dyad로 호출 G하고 결과를 멋지게 형식화하는 데 사용 합니다.


@Okx 암시 적 출력은 단순히 모든 문자를 함께 "
Adám

@Okx 예 목록을 반환하는 함수입니다. 바닥 글은 전체 프로그램으로 실행될 때 발생하는 암시 적 출력을 무시합니다.
Jonathan Allan


7

Powershell, 25 22/23 바이트

두 가지 옵션 중 하나는 첫 번째 인수에서 split을 호출하고 두 번째 인수는 delim 값으로 사용합니다.

$args[0]-split$args[1]

csvs를 구문 분석하기 위해 내장 된 1 바이트 길이는 파일 이름을 첫 번째 인수로 사용하고 두 번째로 삭제합니다.

ipcsv $args[0] $args[1]

-2는 -Delimiter( -D) 매개 변수를 필요로하지 않기 때문에 기본적으로 가정합니다.

슬프게도 powershell은 두 매개 변수의 배열을 전달할 수 없습니다. 두 매개 변수 모두 파일이라고 가정하고 명령을 두 번 실행합니다. 다른 두 가지 var 입력 방법은 내가 볼 수있는 한이보다 짧지 않으므로 가능성이 높습니다. 가장 짧은 답변.

ipcsv의 별칭이며 Import-Csv파일 이름을 첫 번째 명명되지 않은 입력으로 사용하고 기본적으로 두 번째 문자로 구분 문자를 사용합니다.

위키 페이지에서 예제 로 실행

PS C:\Users\Connor\Desktop> .\csvparse.ps1 'example.csv' ','

Date     Pupil               Grade
----     -----               -----
25 May   Bloggs, Fred        C
25 May   Doe, Jane           B
15 July  Bloggs, Fred        A
15 April Muniz, Alvin "Hank" A


5

하스켈, 29 바이트

import Data.Lists
map.splitOn

사용 예 : (map.splitOn) " " ["to be or not","that is the question"]-> [["to","be","or","not"],["that","is","the","question"]].




4

수학, 11 바이트

StringSplit

내장 함수는 문자열 목록과 문자 (그리고 그보다 더 일반적인)의 두 가지 인수를 취합니다. 사용법 예 :

StringSplit[{"to be or not", "that is the question"}, " "]

수확량

{{"to", "be", "or", "not"}, {"that", "is", "the", "question"}}

4

MATLAB / 옥타브, 41 25 바이트

@(x,d)regexp(x,d,'split')

ans첫 번째 입력을 문자열의 셀형 배열로, 두 번째 입력을 문자열로 허용 하는 익명 함수를 작성 합니다.

ans({'Hello World', 'How are you'}, ' ')

온라인으로 사용해보십시오


4

체다, 19 바이트

a->b->a=>@.split(b)

루핑 능력의 좋은 데모. 새로운 구성과 f.op을 추가했습니다. 흥미로운 골프를 허용하는 블록. (=>:@.split)작동해야하지만 작동하지 않습니다 :(


3

MATL, 14 12 4 바이트

H&XX

MATL Online 에서 시도해보십시오 (링크의 끝에 출력 셀 배열의 차원을 표시하도록 수정 됨).

설명

        % Implicitly grab the first input as a cell array of strings
        % Implicitly grab the delimiter as a string
H       % Push the number literal 2 to the stack
&XX     % Split the input at each appearance of the delimiter
        % Implicitly display the result

1

CJam, 5 바이트

l~l./

설명:

l~     e#Input evaluated (as list)
  l    e#Another line of input
   ./  e#Split first input by second

1

'-n', 17 + 1 = 18 바이트를 사용하는 루비

p chomp.split *$*

작동 원리

  • 파일에서 입력
  • 구분 기호는 명령 행 매개 변수로 제공됩니다.
  • 하나의 매개 변수 만 있기 때문에 *$*문자열을 표시하고 split함수 의 매개 변수로 사용할 수 있습니다
  • 나는 피하려고 chomp했지만 다른 해결책은 이것보다 길 것 같습니다.


1

GNU sed , 48 + 1 (r 플래그) = 49 바이트

1h;1d
:
G
/,$/bp
s:(.)(.*)\n\1:,\2:
t
:p;s:..$::

온라인으로 사용해보십시오!

sed에는 데이터 유형이 없지만 목록의 자연스러운 표현은 줄 모음입니다. 따라서 입력 형식은 구분 기호가 첫 번째 행에있는 별도의 행에 각각 DSV 레코드로 구성됩니다.

설명 : 의도적으로 sed는 입력 행이있는 횟수만큼 스크립트를 실행합니다.

1h;1d                  # store delimiter, start new cycle
:                      # begin loop
G                      # append saved delimiter
/,$/bp                 # if delimiter is ',', skip replacements and go to printing
s:(.)(.*)\n\1:,\2:     # replace first occurrence of delimiter with ','
t                      # repeat
:p;s:..$::             # print label: delete appended delimiter (implicit printing)

1

REXX, 95 바이트

arg f d
do l=1 while lines(f)
    n=linein(f)
    do #=1 while n>''
        parse var n w (d) n
        o.l.#=w
    end
end

파일 이름과 구분 기호를 인수로 사용하고 파일의 내용은 stem에 넣습니다 o.


그 공백이 정말로 필요한가요?
Adám

아니요, 가독성을 위해 들여 쓰기 만했습니다. 바이트 수는 들여 쓰기되지 않은 코드를위한 것입니다.
idrougge

REXX의 어떤 맛입니까?
Adám

순수한 ANSI REXX라고 생각합니다. 레지나에서만 테스트했습니다.
idrougge


0

APL (Dyalog) , 4 바이트

15.0 이하의 버전에서는 ⎕ML←3기본적으로 많은 버전이 필요합니다 . 버전 16.0 에서 동일한 효과 로 대체 할 수 있습니다 .

분리자를 왼쪽 인수로 사용하고 DSV를 오른쪽 인수로 사용합니다.

≠⊂¨⊢

온라인으로 사용해보십시오!

 불평등 (왼쪽 주장과 오른쪽 주장)

⊂¨ 각 파티션

 올바른 논증

파티션은 왼쪽 인수에서 해당하는 0으로 표시된 모든 요소를 ​​제거하고 왼쪽 인수의 해당 숫자가 이전 항목보다 클 때마다, 즉 왼쪽 인수가 부울 인 경우 모든 요소에서 새 파티션을 시작하는 것을 의미합니다. 여기에 있습니다.


0

R, 8 바이트 (2 가지 방법)

R에는이 과제의 요구 사항을 충족하는 두 가지 기본 기능이 있습니다.

strsplit

문자열로 구성된 벡터와 구분 기호를 사용하여 구분 된 문자열로 구성된 벡터 목록을 반환합니다.

read.csv

파일 이름과 구분 기호를 사용하여 데이터 프레임을 반환합니다. 기술적으로 이것은 옵션이 필요 header=F하므로 첫 번째 요소를 열 이름으로 읽지 않기 때문에 10 바이트 일 수 있습니다 . 현재 TIO 링크는 stdin에서 읽습니다.

온라인으로 사용해보십시오!

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.