2012-06-18 5 views
10

예를 들어 URL에 도착하는 웹 서비스를 만들려고합니다. www.domain.co.uk/prices.csv 그리고 csv 파일을 읽습니다. 이게 가능하고 어떻게? 이상적으로 csv 파일을 다운로드하지 않고?URL에서 CSV 파일을 읽는 방법?

+0

CSV 파일을 다운로드하지 않고? 어떻게 읽으 리라 기대합니까? 아니면 전체 내용을 먼저 다운로드하지 않고도 일부 내용을 읽는 것입니다. –

+0

클라이언트 측 또는 서버 측을 원하십니까? – miniBill

+1

다운로드한다고해서 생각하는대로 디스크에 파일을 저장하지 않아도된다는 의미는 아닙니다. 즉, 다운로드하지 않고 파일을 읽을 수는 없습니다. – Botz3000

답변

19

당신이 사용할 수있는 메모리에 모든 것을 저장하지 않고 문서를 구문 분석 할 수 있습니다 저기서 나는 너의 자신을 굴리는 것에 반대 할 것을 권할 것이다. FileHelpers은 좋은 것입니다.

+1

어쨌든 전체 파일을 문자열로 읽는다면'WebRequest'의 추가적인 유연성을 필요로하지 않고 그냥' WebClient.DownloadString'. – Joey

4

이어야합니다. 파일을 다운로드하십시오. 코드를 가져 오지 않고도 코드를 어떻게 든 원격으로 작성할 수있는 것은 아닙니다.

그런 의미라면 파일에 저장할 필요가 없습니다. WebClient 클래스를 사용하여 HTTP를 통해 리소스를 가져올 수 있습니다. 특히 DownloadString method을보고 싶을 수 있습니다.

2

여기서 url은 csv 파일이있는 사이트이며 csvPath는 실제 파일을 전송할 위치입니다.

1

웹 서비스에서 WebClient 클래스를 사용하여 다음과 같은 파일을 다운로드 할 수 있습니다 (어떤 예외 처리도하지 않고 사용하거나 닫기/삭제하는 호출이 아니라 단지 사용할 수있는 아이디어를주고 싶음). 수정/개선 ...)

using System.Net; 

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

그런 다음 파일 내용을 서비스의 실행 흐름에서 사용할 수있게되면 원하는대로 할 수 있습니다.

웹 서비스 호출의 반환 값으로 클라이언트에 반환해야하는 경우 DataSet 또는 원하는 다른 데이터 구조를 반환 할 수 있습니다.

+0

hmmmm 그래서 만약 내가 ctv를 datatable에 넣길 원한다면, datatable table = 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); 
     } 
    } 
} 

CSV 파서의 많음이 비록 스트림을 사용하면

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 또한 스트림에서 직접 읽을 수 있습니다.

관련 문제