2012-06-04 6 views

उत्तर

12

फ़ाइल डाउनलोड करने के लिए get-pure-port का उपयोग करें, और इसे पार्स करने के लिए Planet लाइब्रेरी (require (planet neil/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

इस उत्तर मुझे मिल गया जहां मैं जाना करने के लिए देख रहा था, लेकिन मैंने सोचा कि मैं भविष्य साहसी खोजकर्ताओं के लिए झंकार चाहते हैं। आप जो भी पूछते हैं उसके लिए एक आसान आमंत्रण (शायद सीएसवी लाइब्रेरी के नए संस्करणों के साथ?) है। यह निश्चित रूप से मानता है कि आप अल्पविराम डिलीमीटर चाहते हैं, और उपर्युक्त उदाहरण के रूप में अग्रणी/पिछली सफेद जगह को पट्टी करना चाहते हैं।

#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-> सूची समारोह स्वचालित रूप से ऊपर उल्लिखित चूक वाली csv-रीडर पैदा करता है। आप make-csv-reader से csv->list के साथ निर्मित अपने कस्टम सीएसवी रीडर को पारित करके डिफ़ॉल्ट रूप से ओवरराइड कर सकते हैं (उदाहरण के लिए यदि आपके पास एक अलग डिलीमीटर है या पीछे की ओर बढ़ना और अग्रणी व्हाइटस्पेस नहीं करना चाहते हैं)।

6

नील की एक नई लाइब्रेरी, सीएसवी-रीडिंग है, इसलिए इसके बजाय इसका उपयोग करें।

पहले, Raco का उपयोग कर पैकेज स्थापित:

(require csv-reading) 

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

CSV डाउनलोड करने के लिए:

raco pkg install csv-reading 

एक सीएसवी एक सूची फ़ाइल बदलने के लिए, यहाँ एक सहायक समारोह है फ़ाइल और एक सूची में कनवर्ट करें, यह करें:

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

सीएसवी-रीडिंग लाइब्रेरी के लिए यहां देखें: csv-reading library, यह नवीनतम संस्करण है (और अन्य उत्तरों बहिष्कृत लोगों का उपयोग कर रहे हैं)।

संबंधित मुद्दे