www.domain.co.uk/prices.csv
たとえば、URLにアクセスしてcsvファイルを読み取るWebサービスを作成しようとしています。これは可能ですか、そしてどのようにですか?理想的には、csvファイルをダウンロードせずに?
5 に答える
あなたが使用することができます:
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パーサーがありますが、自分でロールすることはお勧めしません。FileHelpersは良いものです。
// 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);
URLはcsvファイルを含むサイトであり、csvPathは実際のファイルを移動する場所です。
Webサービスでは、WebClientクラスを使用して、次のようなファイルをダウンロードできます(例外処理、usingまたはClose / Dispose呼び出しはありませんが、使用および改良/改善できるアイデアを提供したかっただけです。 ..)
using System.Net;
WebClient webClient = new WebClient();
webClient.DownloadFile("http://www.domain.co.uk/prices.csv");
その後、サービスの実行フローでファイルコンテンツが利用可能になると、それを使って好きなことを行うことができます。
Webサービス呼び出しの戻り値としてクライアントに返す必要がある場合は、DataSet
またはその他の任意のデータ構造を返すことができます。
Sebastien LorionのCSVリーダーには、ストリームを取得するコンストラクターがあります。
これを使用することにした場合、例は次のようになります。
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
}
}
}
人気の高いFileHelpersを使用すると、ストリームから直接読み取ることもできます。
WebRequestのドキュメントには、ストリームを使用する例があります。ストリームを使用すると、すべてをメモリに保存せずにドキュメントを解析できます