2016-08-27 6 views
0

テキストのみを含むURLがあります。大規模なオンラインテキストファイルでテキストを検索する最速の方法

それは目標がsecondWord、その後Console.WriteLinefirstWordを探すことです

firstWord~:::~secondWord

の形式です。

WebClientを使用してテキストファイルをstringにダウンロードしてから、regexを探して見つけてください。

問題は、このファイルが約1ギガバイトになることです。これを実行する最速の方法は何か分かりません。

アイデア?ありがとう!

+1

あなたはスピードをしたい場合、あなたは間違いなく、おそらくあなたが一度にいくつかのデータをダウンロードすることができます正規表現 –

+2

を使用したくないでしょうか?新しい行が見つかるまでそれを読んでから、その行を好きなように処理するメソッドがあるとします。テキストが見つからなかった場合は、次の新しい行が見つかるまで、数バイトをさらにダウンロードしてください。 –

+0

@VisualVincentそれは良い点ですが、テキストが1ギグファイルの最下部にあるとすれば、どれくらいの時間がかかりますか? – Dgameman1

答えて

0

私が考えることのできる最も速い方法は以下のとおりです。それはここでいくつかのダニを剃ることができないと言っているわけではありません...我々はこれ以上合理化できるかどうかを確認する他のフィードバックのために満足しています。

// WebClient is very bulky with a lot of stuff we don't need. 
// By dealing with the request, response and stream ourself we can get the string a bit faster. 
WebRequest request = WebRequest.Create("http://www.UrlToDownloadStringFrom.com"); 
WebResponse response = request.GetResponse(); 
Stream stream = response.GetResponseStream(); 
StreamReader streamReader = new StreamReader(stream); 

// the result should return "firstWord~:::~secondWord" as expected. 
string result = streamReader.ReadToEnd(); 

// split the string apart whenever the string ~:::~ appears within it. 
string[] resultSplit = result.Split(new string[] { "~:::~" }, StringSplitOptions.None); 

// resultSplit[0] is firstWord, resultSplit[1] is second word 
string secondWord = resultSplit[1]; 
+0

'HttpWebRequest'がはるかに高速になって、' WebClient'を使ったあなたの例もなぜなら、URLには 'firstWord〜:::〜secondWord'の反復を1つ以上含むことになります。それは、1行あたり約1ギガのテキストがそのフォーマットで入っていて、各行は異なるテキストを持っています。 – Dgameman1

+1

私は上記のWebClientを読んでいます。私は思ったほど速くなるように答えを編集しました。私はストリームリーダーにチェックを追加したくありません。なぜなら、中間読み取りをチェックすることは、それを終了させることよりも時間がかかると思うからです。しかし、それは私の前提です。テストが必要です。 –

関連する問題