Plateforme Level Extreme
Abonnement
Profil corporatif
Produits & Services
Support
Légal
English
Complex string parsing
Message
De
19/03/2013 15:16:53
 
 
Information générale
Forum:
ASP.NET
Catégorie:
Code, syntaxe and commandes
Versions des environnements
Environment:
C# 4.0
OS:
Windows 7
Network:
Windows 2003 Server
Database:
MS SQL Server
Divers
Thread ID:
01568786
Message ID:
01568805
Vues:
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.


Foreach seems ok
Gregory
Précédent
Suivant
Répondre
Fil
Voir

Click here to load this message in the networking platform