Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
Complex string parsing
Message
 
 
To
19/03/2013 14:52:27
General information
Forum:
ASP.NET
Category:
Coding, syntax and commands
Environment versions
Environment:
C# 4.0
OS:
Windows 7
Network:
Windows 2003 Server
Database:
MS SQL Server
Miscellaneous
Thread ID:
01568786
Message ID:
01568804
Views:
42
>>The whole current method is this
>>
>>
>>public static void PopulateFromSQML(this Dictionary<String, String> tDictionary, String tcSQML)
>>      {
>>         Regex regexXml = new Regex(@"\<(?'field'[^/].*?)\>(?'data'.*?)\</\k'field'\>");
>>
>>         MatchCollection matches = regexXml.Matches(tcSQML);
>>         foreach (Match m in matches)
>>         {
>>            try
>>            {
>>               if (!tDictionary.ContainsKey(m.Groups["field"].ToString()))
>>                  tDictionary.Add(m.Groups["field"].ToString(), m.Groups["data"].ToString());
>>            }
>>            catch (Exception)
>>            {
>>               // Don't care
>>            }
>>         }
>>      }
>>
>>Do you see what can I change in that method to be able to properly handle such strings?
>
>
>(1) I've changed the pattern a bit - to my taste
>(2) Use of the static Method
>(3) Important - specify RegexOptions.Singleline
>
>
>		public static void PopulateFromSQML(this Dictionary<String, String> tDictionary, String tcSQML)
>		{
>			tDictionary.Clear();
>
>			string pattern = @"<(?<field>[^/>]+)>(?<data>.*)</\k<field>>";
>
>			MatchCollection matches = Regex.Matches(tcSQML, pattern, RegexOptions.Singleline);
>			foreach (Match m in matches)
>			{
>				//Console.WriteLine("Key: {0}\nValue: {1}\n", m.Groups["field"], m.Groups["data"]);
>
>				if (!tDictionary.ContainsKey(m.Groups["field"].ToString()))
>					tDictionary.Add(m.Groups["field"].ToString(), m.Groups["data"].ToString());
>			}
>
>		}
>
>
Do you know how can I print that dictionary?

Here is what I tried to test
 String s = @"<func>getqtyremaining</func><tcoperator>ADMIN</tcoperator><tcreturntype>XML</tcreturntype>
<tcsalespoint>TICKET004001</tcsalespoint><ttdatetime>03/11/2013 01:19 PM</ttdatetime>
<TCDCILIST><DCI>ACTIVITIESSKYDIVING 1000      </DCI><DCI>ACTIVITIESSKYDIVING 1030      </DCI>
<DCI>ACTIVITIESSKYDIVING 1100      </DCI><DCI>ACTIVITIESSKYDIVING 1130      </DCI><DCI>ACTIVITIESSKYDIVING 1200      </DCI>
<DCI>ACTIVITIESSKYDIVING 1230      </DCI><DCI>ACTIVITIESSKYDIVING 1300      </DCI><DCI>ACTIVITIESSKYDIVING 1330      </DCI>
<DCI>ACTIVITIESSKYDIVING 1400      </DCI><DCI>ACTIVITIESSKYDIVING 1430      </DCI></TCDCILIST>";

        Dictionary<String, String> parameters = new Dictionary<String, String>(StringComparer.OrdinalIgnoreCase);
        parameters.PopulateFromSQML(s);

        foreach (KeyValuePair<string, string> val in parameters)
        {
            Console.WriteLine(val.Key, val.Value);
        }
        Console.ReadKey();
I am not sure how to write this foreach.

Thanks again.
If it's not broken, fix it until it is.


My Blog
Previous
Next
Reply
Map
View

Click here to load this message in the networking platform