मैं कुछ एक्सएमएल संरचना के माध्यम से चलकर गतिशील रूप से नियमित अभिव्यक्ति उत्पन्न कर रहा हूं और कथन का निर्माण कर रहा हूं क्योंकि मैं अपने नोड प्रकारों के माध्यम से शूट करता हूं। मैं इस नियमित अभिव्यक्ति का उपयोग लेआउट प्रकार के हिस्से के रूप में कर रहा हूं जिसे मैंने परिभाषित किया है। मैं फिर एक पाठ फ़ाइल के माध्यम से विश्लेषण करता हूं जिसमें प्रत्येक पंक्ति की शुरुआत में एक आईडी है। यह आईडी मुझे एक विशिष्ट लेआउट पर इंगित करती है। फिर मैं उस पंक्ति में डेटा को अपने रेगेक्स के खिलाफ मिलान करने का प्रयास करता हूं।गतिशील रूप से निर्मित नियमित अभिव्यक्तियां बहुत धीमी गति से चल रही हैं!
ठीक और बेवकूफ सही लगता है? एकमात्र समस्या यह है कि तारों को बहुत धीमा कर रहा है। मैंने उन्हें कुछ चीजों की कोशिश करने और गति देने के लिए संकलित के रूप में सेट किया है, लेकिन इसका कोई फायदा नहीं हुआ है। परेशान बात यह है कि ये अभिव्यक्ति जटिल नहीं हैं। मैं किसी भी तरह से रेगेक्स गुरु नहीं हूं, लेकिन मुझे सभ्य चीजें अच्छी तरह से चलने के लिए उनके बारे में जानकारी है।
यहाँ कोड है कि भाव उत्पन्न करता है ...
StringBuilder sb = new StringBuilder();
//get layout id and memberkey in there...
sb.Append(@"^([0-9]+)[ \t]{1,2}([0-9]+)");
foreach (ColumnDef c in columns)
{
sb.Append(@"[ \t]{1,2}");
switch (c.Variable.PrimType)
{
case PrimitiveType.BIT:
sb.Append("(0|1)");
break;
case PrimitiveType.DATE:
sb.Append(@"([0-9]{2}/[0-9]{2}/[0-9]{4})");
break;
case PrimitiveType.FLOAT:
sb.Append(@"([-+]?[0-9]*\.?[0-9]+)");
break;
case PrimitiveType.INTEGER:
sb.Append(@"([0-9]+)");
break;
case PrimitiveType.STRING:
sb.Append(@"([a-zA-Z0-9]*)");
break;
}
}
sb.Append("$");
_pattern = new Regex(sb.ToString(), RegexOptions.Compiled);
वास्तविक धीमी गति से भाग ...
public System.Text.RegularExpressions.Match Match(string input)
{
if (input == null)
throw new ArgumentNullException("input");
return _pattern.Match(input);
}
एक ठेठ "_pattern" 40-50 कॉलम हो सकता है। मैं पूरे पैटर्न चिपकाने से बचाऊंगा। मैं प्रत्येक मामले को समूहबद्ध करने का प्रयास करता हूं ताकि मैं मैच ऑब्जेक्ट में बाद में प्रत्येक मामले पर गणना कर सकूं।
कोई सुझाव या संशोधन जो काफी मदद कर सकता है? या यह धीरे-धीरे उम्मीद की जा रही है?
स्पष्टता के लिए संपादित करें: क्षमा करें, मुझे नहीं लगता कि मैं पहली बार पर्याप्त स्पष्ट था।
मैं एक विशिष्ट लेआउट के लिए रेगेक्स उत्पन्न करने के लिए एक एक्सएमएल फ़ाइल का उपयोग करता हूं। मैं फिर डेटा आयात के लिए एक फ़ाइल के माध्यम से चलाता हूं। मुझे यह सुनिश्चित करने की ज़रूरत है कि फ़ाइल में प्रत्येक पंक्ति उस पैटर्न से मेल खाती है जो इसे कहती है। तो, कई बार, संभव हजारों के खिलाफ पैटर्न की जांच की जा सकती है।
आप बीआईटी के लिए [01] कोशिश कर सकते हैं। – Dave
क्या आप इस रेगेक्स के साथ सीएसवी से मिलान करने की कोशिश कर रहे हैं? – Gumbo
इसका टैब एसएएस –