http://msdn.microsoft.com/fr-fr/library/system.io.stream.read.aspx
buf は byte[] 配列で、メソッドが返されると、読み取ったデータが含まれます。BUFFER_SIZE は、読み取りたいデータのサイズです。1 バイトを読み取る場合は、BUFFER_SIZE=1 です。1 キロバイトのデータを読み込みたい場合は、BUFFER_SIZE=1024 などです。大きすぎるバッファを要求した場合 (たとえば、データが 1KB のときに 1MB を要求した場合) は、あまり問題になりません。KB を読み取り、戻ります。
XE.com が変更を決定しない限り、最終的な文字列は次のようになります。
XE.com: USD から EUR レート: 1.00 USD = 0.716372 EUR
String メソッドを使用して、必要のないものを取り除くことができます: 最初の部分全体
(XE.com: USD to EUR rate:)
データで文字列を作成するだけで簡単に削除できます。
(string header = "XE.com: {0} to {1} rate:", currency1, currency2)
、次に呼び出しString.Replace(header, '')
ます。そこから を呼び出しString.Split('=')
、「=」記号で分割し、分割された文字列から通貨部分を削除して (再びString.Replace()
)、最後に呼び出すことができます。Double.TryParse()
注: コードスパークルの方法は、基本的にステップ 1 をスキップするため、はるかに簡単です。しかし、XE.com は API を提供していません。返された文字列が有効であるか、将来変更されないという保証はありません。
OK、ここにいくつかのコードがあります:
private double GetConvertedCurrencyValue(string inputCurrency, string outputCurrency, double value)
{
string request = String.Format(http://www.xe.com/ucc/convert.cgi?Amount={0}&From={1}&To={2}", value, inputCurrency, outputCurrency);
System.Net.WebClient wc = new System.Net.WebClient();
string apiResponse = wc.DownloadString(request); // This is a blocking operation.
wc.Dispose();
/* Formatting */
// Typical response: "XE.com: curr1 to curr2 rate: x curr1 = y curr2"
// The first part, up until "x curr1" is basically a constant
string header = String.Format("XE.com: {0} to {2} rate:" inputCurrency, outputCurrency);
// Removing the header
// The response now looks like this: x curr1 = y curr2
apiResponse = apiResponse.Replace(header, "");
// Let's split the response at '=', to retrieve the right part
string outValue = apiResponse.Split('=')[1];
// Getting rid of the 'curr2' part
outValue = outValue.Replace(outputCurrency, "");
return Double.Parse(outValue, System.Globalization.CultureInfo.InvariantCulture);
}