2017-06-11 10 views
-2

私はレコードを検索するループで約250,000を繰り返すこのコードを持っています。 28種類の正規表現があります(これはその1つです)。ファイルへの書き込み、文字列への読み込み、コードの終わりに向かっての読み込み以外の簡単な方法はありますか?これをテキストファイルではなくメモリに保存する方法はありますか?

if (CSV_Radio_Button.Checked) 
    { 
     string pattern = @"(?<=\*\*Course :)(.*?)(?=\*\*Going)"; 
     Regex myRegex = new Regex(pattern, RegexOptions.IgnoreCase); 
     Match m = myRegex.Match(text); 
     while (m.Success) 
     { 
      string CourseToString = m.ToString(); 
      System.IO.File.WriteAllText(CourseFile, UppercaseWords(CourseToString)); 
      m = m.NextMatch();    
     } 
    } 
    string Course = File.ReadLines(CourseFile).ElementAtOrDefault(0); 
+0

...リストを使用していますね。 –

+0

データを変数に格納するのは、C#の学習の最初の1時間と同じです。答えとして "do it"以外は何を期待しますか? – TomTom

答えて

0

私はこれをテストしていませんが、これは私が似たようなことをした方法です。リストは機能しますが、文字列の作成が完了したらリストを反復処理します。また、さまざまなストリームの1つを使用することもできます。

StringBuilder CourseBuilder = new StringBuilder(); 

while (m.Success) 
    { 
     CourseBuilder.AppendLine(m.ToString()); 
     m = m.NextMatch();    
    } 
} 
string Course = CourseBuilder.ToString(); 
0

あなたが意図的にここにファイルを上書きした場合:

System.IO.File.WriteAllText(CourseFile, UppercaseWords(CourseToString)); 

をあなたはこのようなあなたのブロックの前に定義された文字列とその行を置き換えることができます。

string CSV_regex_result; 
if (CSV_Radio_Button.Checked) 
{ 
    ... 
    while(m.Success) { 
     CSV_regex_result = UppercaseWords(m.ToString()); 
     m = m.NextMatch(); 
    } 
} 

今、あなたが最後にマッチした正規表現にアクセスすることができますCSV_regex_result

コードに間違いがあり、正規表現がすべて必要な場合は、それを区切っているかどうかによって異なります。 あなたはシングルストリングデイヴィッドグリーン答えが必要な場合は行く方法です。 しかし、文字列サイズの制限に注意してください。

あなたが分離結果をしたい場合: List<string> CSV_regex_result = new List<string>();と私の例string CSV_regex_result;に交換し、ループ内でCSV_regex_result.Add(UppercaseWords(m.ToString()));CSV_regex_result = UppercaseWords(m.ToString());を交換してください。

結果を正規表現名で区切って区切ります。次のことができます。もちろん

Dictionary<string, List<string>> result = new Dictionary<string, List<string>>(); 
... 
List<string> Course_result = new List<string>();  
... 
//in loop 
Course_result.Add(UppercaseWords(m.ToString())); 
... 
//after loop 
if (!result.ContainsKey("Course")) result.Add("Course",Course_result); 
else result["Course"]=Course_result; 

あなたが正規表現のマージされた結果をしたい場合は、Dictionary<string,string>を作成して、StringBuilderので生成された結果を追加することができます。

メモリが不足している場合(メモリサイズとデータ量によって異なります)、現在の方法(ファイルにファイルを保存する)を守ることができます。

関連する問題