2017-11-14 2 views
3
변수

로를 이용하여 I이 저장된 데이터 (20 개 벡터 V)이J로 CSV 파일을 가져 오기 및

v=:<"1 (? 20 2 $ 20) 
makecsv v 
v writecsv jpath'~temp/position.csv' 
]vcsv =: freads jpath '~temp/position.csv' 
fixcsv vcsv 

같은 CSV 파일로하고, I는

readcsv jpath '~temp/position.csv' 

하여 CSV 파일을 가져올 수도 그러나, 나는 사실

w=: readcsv jpath '~temp/position.csv' 
diff=: ([{]) ,. ] 

0 diff v 
0 diff w 

로 이름을 경우와 동일한 결과를 제공하지 않습니다, 0은 diff w는 길이 오류

0123을 제공합니다

v (원본) 및 w (가져온 csv 데이터)에서 동일한 결과를 얻으려면 다른 방법이 있습니까?

감사합니다.

답변

1

CSV 파일을 작성할 때 ASCII 문자가 여러 개 있습니다. 이 경우 숫자, 공백 및 쉼표가 있습니다.

CSV를 읽을 때 J는 형식이나 내용에 대해 어떠한 보증도하지 않습니다. fixcsv은 쉼표와 줄 바꿈을 셀 눈금으로 변환하지만 J 상자는 가변 길이 ASCII 문자열이므로 안전합니다.

v으로 돌아가고 싶다면 두 가지해야 할 일이 있습니다. 첫 번째는 치수를 올바르게 얻는 것입니다. 정의상 CSV 파일은 2 차원입니다. CSV에 2 차원 배열을 쓰도록 예제를 변경하면 fixcsv readcsv 이후에 같은 모양을 갖게됩니다.

u =: 4 5 $ v 
    u writecsv jpath'~temp/position.csv' 
104 
    ] t =: fixcsv freads jpath '~temp/position.csv' 
┌────┬─────┬────┬────┬─────┐ 
│9 11│1 4 │8 3 │3 12│5 4 │ 
├────┼─────┼────┼────┼─────┤ 
│7 11│10 11│9 10│0 8 │6 16 │ 
├────┼─────┼────┼────┼─────┤ 
│13 8│17 12│13 2│5 19│17 14│ 
├────┼─────┼────┼────┼─────┤ 
│2 15│19 10│3 1 │12 7│14 13│ 
└────┴─────┴────┴────┴─────┘ 
    $ v 
20 
    $ u 
4 5 
    $ t 
4 5 

당신은 확실히 (박스 번호 쌍이기는하지만) 한 차원 목록을 처리하는 경우에, 당신은 Ravel (,) 당신이 읽는 것은 하나 개의 차원으로 내려받을 수 있습니다.

$ w 
1 20 
    $ , w 
20 

동일한 모양으로 만들었 으면 ASCII 텍스트를 숫자 배열로 변환해야합니다. Numbers (".)으로하십시오.

10 * > {. v 
90 110 
    10 * > {. , w 
|domain error 
| 10 *>{.,w 
    'a' , > {. , w 
a9 11 
    10 * _ ". > {. , w 
90 110 
2

저는 J 초보자이기 때문에 나중에 더 나은 대답을 얻을 수 있습니다.하지만 그것에 대해 파고 들며 뭔가를 찾았습니다.

먼저 writecsv가하면서 readcsv가 강조 광산 " 배열을 박스형 에 CSV 파일을 읽어"라는 tables/csv 애드온 문서 상태의 "CSV 파일 어레이를 출력합니다." 즉, readcsvwritecsv이 아니고 대칭 연산입니다. 그리고 값의 형태는 다음 사항을 확인하는 것 :

$ w 
1 20 
    $ v 
20 

이것은 또한 왜 v하지만 wdiff 작품. 당신은 단순히 결과를 언 박싱 경우, 더 나은 작동하는 것 같다 :

0 diff 0 { w 
┌───┬─────┐ 
│1 3│1 3 │ 
├───┼─────┤ 
... 
├───┼─────┤ 
│1 3│5 8 │ 
└───┴─────┘ 

그러나, 모양은 여전히 정확히 같은 :

$ > v 
20 2 
    $ > 0 { w 
20 5 

내가 readcsv 알고하지 않기 때문에이 생각 귀하의 값이 숫자임을; 디코딩하려면 어딘가에 ".을 던져야 할 것입니다.

관련 문제