2012-06-04 2 views

답변

12

get-pure-port을 사용하여 파일을 다운로드하고 Planet 라이브러리 (require (planet neil/csv))을 사용하여 파싱하십시오.

다음 예제에서는 데이터를 포함하는 csv 파일을 다운로드하여 다양한 갈라파고스 섬의 크기와 각 섬에서 발견 된 수를 파싱합니다. 반환

#lang racket 
(require (planet neil/csv:1:=7) net/url) 

(define galapagos-url 
    (string->url 
    "http://www.stat.washington.edu/~handcock/536/Data/galapagos.csv")) 

(define make-galapagos-csv-reader 
    (make-csv-reader-maker 
    '((separator-chars    #\,) 
    (strip-leading-whitespace? . #t) 
    (strip-trailing-whitespace? . #t)))) 

(define (all-rows url make-reader) 
    (define next-row (make-reader (get-pure-port url))) 
    (define (loop) 
    (define row (next-row)) 
    (if (empty? row) 
     '() 
     (cons row (loop)))) 
    (loop)) 

(all-rows galapagos-url make-galapagos-csv-reader) 

첫 번째 행은 다음과 같습니다

'(("Island" 
    "Observed.species" 
    "Native.species" 
    "Area(km^2)" 
    "Elevation(m)" 
    "Distance.nearest.island(km)" 
    "Distance.Santa.Cruz(km)" 
    "Area.adj.island(km^2)") 
    ("Baltra" "58" "23" "25.09" "" "0.6" "0.6" "1.84") 
    ("Bartolome" "31" "21" "1.24" "109" "0.6" "26.3" "572.33") 
    ("Caldwell" "3" "3" "0.21" "114" "2.8" "58.7" "0.78") 
3

이 대답은 내가 가서보고 된 곳 저를 얻었으나, 나는 미래의 용맹 한 탐험가를 위해 삐 소리라고 생각했다. 요청한 것을하기에 더 쉬운 호출이 있습니다 (아마도 csv 라이브러리의 최신 버전이있을 것입니다). 이것은 물론 쉼표 구분 기호가 필요하고 앞의 예와 같이 앞뒤 공백을 제거한다고 가정합니다.

#lang racket 
(require (planet neil/csv:2:0) net/url) 

;; Continuing with the UW data sources examples 
(define iver-url 
    (string->url 
    "http://faculty.washington.edu/cadolph/vis/iver.csv")) 

(csv->list (get-pure-port iver-url)) 

이 버전에서 csv-> list 함수는 앞서 언급 한 기본값을 사용하여 자동으로 csv-reader를 만듭니다. make-csv-reader으로 생성 된 맞춤 csv 리더를 csv->list에 전달하여 기본값 (예 : 구분 기호가 다른 경우 또는 후행 및 선행 공백을 제거하지 않으려는 경우)을 무시할 수 있습니다.

6

Neil에 새 라이브러리 csv-reading이 있으므로 대신 사용하십시오. 먼저

, RACO 사용하여 패키지를 설치합니다

(require csv-reading) 

(define (csvfile->list filename) 
    (call-with-input-file filename 
         csv->list)) 

는 CSV를 다운로드하려면 :

raco pkg install csv-reading 

는 CSV가 목록에 파일을 변환하려면, 여기에 도우미 함수입니다 파일로 변환하고 목록으로 변환하려면 다음과 같이하십시오.

(require net/url) 
((compose csv->list get-pure-port string->url) "http://example.com") 

csv- 읽기 라이브러리에 대한 내용은 csv-reading library이며, 최신 버전입니다 (다른 답변은 사용되지 않는 것들입니다).

관련 문제