2012-06-18 14 views
10

मैं एक वेब सेवा बनाने की कोशिश कर रहा हूं जो एक यूआरएल को प्राप्त करता है उदा। www.domain.co.uk/prices.csv और फिर सीएसवी फ़ाइल पढ़ता है। क्या यह संभव है और कैसे? आदर्श रूप से सीएसवी फ़ाइल डाउनलोड किए बिना?यूआरएल से सीएसवी फ़ाइल कैसे पढ़ा जाए?

+0

सीएसवी फ़ाइल डाउनलोड किए बिना? आप इसे पढ़ने की उम्मीद कैसे करते हैं? या आप पूरी बात यह है कि पूरी चीज को पहले डाउनलोड किए बिना इसका एक हिस्सा पढ़ें। –

+0

क्या आप उस क्लाइंट साइड या सर्वर की तरफ करना चाहते हैं? – miniBill

+1

डाउनलोड करने का मतलब यह नहीं है कि आपको फ़ाइल को डिस्क पर सहेजना है यदि आप यही सोचते हैं। कहा जा रहा है, आप इसे डाउनलोड किए बिना फ़ाइल नहीं पढ़ सकते हैं। – Botz3000

उत्तर

19

आप इस्तेमाल कर सकते हैं बिना दस्तावेज़ को पार्स करने की अनुमति देता है वहाँ बाहर और मैं खुद को रोलिंग के खिलाफ सलाह देंगे। FileHelpers एक अच्छा है।

+1

आप एक स्ट्रिंग में पूरी फ़ाइल वैसे भी पढ़ रहे हैं और WebRequest' तुम सिर्फ उपयोग कर सकते हैं 'में अतिरिक्त लचीलापन की जरूरत नहीं है' WebClient.DownloadString'। – Joey

4

आप को फ़ाइल को पढ़ने के लिए डाउनलोड करना है। ऐसा नहीं है कि आपका कोड उन्हें किसी भी तरह से सामग्री को दूरस्थ रूप से दिव्य रूप से प्राप्त कर सकता है।

लेकिन यदि आपको इसका मतलब है तो आपको इसे फ़ाइल में सहेजने की आवश्यकता नहीं है। आप HTTP पर संसाधन लाने के लिए WebClient कक्षा का उपयोग कर सकते हैं। विशेष रूप से आप DownloadString method देख सकते हैं।

2
// Download the file to a specified path. Using the WebClient class we can download 
// files directly from a provided url, like in this case. 

System.Net.WebClient client = new WebClient(); 
client.DownloadFile(url, csvPath); 

कहाँ यूआरएल csv फ़ाइल और csvPath के साथ अपनी साइट है जहाँ आप वास्तविक फ़ाइल जाना चाहते हैं।

1

अपनी वेब सेवा में आप फ़ाइल डाउनलोड करने के लिए वेब क्लाइंट क्लास का उपयोग कर सकते हैं, इस तरह कुछ (मैंने कोई अपवाद हैंडलिंग नहीं डाली है, किसी भी का उपयोग नहीं कर रहा है या बंद/डिस्प्ले कॉल नहीं कर रहा है, बस वह विचार देना चाहता था जिसका आप उपयोग कर सकते हैं और शुद्ध/में सुधार ...)

using System.Net; 

WebClient webClient = new WebClient(); 
webClient.DownloadFile("http://www.domain.co.uk/prices.csv"); 

तो आप आप इसके साथ चाहते एक बार फ़ाइल सामग्री आपकी सेवा के निष्पादन के प्रवाह में उपलब्ध है कुछ भी कर सकते हैं।

आप ग्राहक को वेब सेवा की वापसी मान के रूप में वापस जाने के लिए है, तो आप एक फोन DataSet या किसी अन्य डेटा संरचना आप पसंद करते हैं लौट सकते हैं या तो।

+0

hmmmm तो अगर मैं, एक datatable में सीएसवी रखना चाहते थे होगा मुझे क्या datatable तालिका = WebClient – Beginner

0

WebRequest के लिए प्रलेखन एक उदाहरण धाराओं का उपयोग करता है है।

public string GetCSV(string url) 
{ 
    HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url); 
    HttpWebResponse resp = (HttpWebResponse)req.GetResponse(); 

    StreamReader sr = new StreamReader(resp.GetResponseStream()); 
    string results = sr.ReadToEnd(); 
    sr.Close(); 

    return results; 
} 

और फिर यह विभाजित करने के लिए:

public static void SplitCSV() 
{ 
    List<string> splitted = new List<string>(); 
    string fileList = getCSV("http://www.google.com"); 
    string[] tempStr; 

    tempStr = fileList.Split(','); 

    foreach (string item in tempStr) 
    { 
     if (!string.IsNullOrWhiteSpace(item)) 
     { 
      splitted.Add(item); 
     } 
    } 
} 

सीएसवी पारसर्स के बहुत देखते हैं हालांकि एक धारा का उपयोग करके आप यह सब स्मृति में संग्रहीत करने

1

Sebastien Lorion's CSV Reader एक निर्माता है कि एक स्ट्रीम लेता है।

आप इस का उपयोग करने का फैसला किया है, तो अपने उदाहरण बन जाएगा:

void GetCSVFromRemoteUrl(string url) 
{ 
    HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest 
    HttpWebResponse response = request.GetResponse() as HttpWebResponse; 

    using (CsvReader csvReader = new CsvReader(response.GetResponseStream(), true)) 
    { 
     int fieldCount = csvReader.FieldCount; 
     string[] headers = csvReader.GetFieldHeaders(); 

     while (csvReader.ReadNextRecord()) 
     { 
      //Do work with CSV file data here 
     } 
    } 

} 

ever popular FileHelpers भी आप सीधे एक धारा से पढ़ने के लिए अनुमति देता है।

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