// ---------------------------------------------------------------------------------------- /// <!-- TestKeyListFile --> /// <summary> /// /// </summary> /// <param name="inputPath"></param> /// <param name="targetPath"></param> /// <remarks> /// Usage: /// KeyListFile.TestKeyListFile("C:\\docs\\input.txt", "C:\\docs\\output.txt"); /// </remarks> public static void TestKeyListFile(string inputPath, string targetPath) { // -------------------------------------------------------------------------- // Produce a report of what keys contain what values in their value list // -------------------------------------------------------------------------- string fileInput = KeyListFile.GetStringFromFile(inputPath, ""); KeyListFile valuesforEachKey = new KeyListFile(fileInput, ':', ' '); KeyListFile keysForEachValue = valuesforEachKey.ConvertValuesAndKeys(':', ' '); string report = keysForEachValue.ConstructOrderedReport(false, true); // -------------------------------------------------------------------------- // Test and output the report // -------------------------------------------------------------------------- string target = KeyListFile.GetStringFromFile(targetPath, ""); if (report == target) { Console.Write("success\r\n"); } else { Console.Write("not quite\r\n"); } Console.Write(report); }
// ---------------------------------------------------------------------------------------- /// <!-- ConvertValuesAndKeys --> /// <summary> /// Returns a KeyListFile identifying which values are used by which keys and /// </summary> /// <returns></returns> public KeyListFile ConvertValuesAndKeys(char keyDelimiter, char itemDelimiter) { // -------------------------------------------------------------------------- // Initialize the conversion // -------------------------------------------------------------------------- KeyListFile valuesBecomeKeys = new KeyListFile(keyDelimiter, itemDelimiter); foreach (string formerKey in this.Keys) { List <string> formerValue = this[formerKey]; for (int i = 0; i < formerValue.Count; ++i) { if (!valuesBecomeKeys.ContainsKey(formerValue[i])) { valuesBecomeKeys.Add(formerValue[i], new List <string>()); } } } // -------------------------------------------------------------------------- // Fill the conversion // -------------------------------------------------------------------------- foreach (string formerKey in this.Keys) { List <string> formerValue = this[formerKey]; for (int i = 0; i < formerValue.Count; ++i) { valuesBecomeKeys[formerValue[i]].Add(formerKey); } } return(valuesBecomeKeys); }