Esempio n. 1
0
 private static void AddLine(WordsListFactory wordsListFactory, KeyValuePair<long, List<string>> line)
 {
     foreach (var word in line.Value)
     {
         var firstChar = word[0];
         var wordsList = wordsListFactory.GetOrCreateWordsList(firstChar);
         if (wordsList.WordsCollection.Any(w => w.Key == word))
         {
             wordsList.WordsCollection.First(m => m.Key == word).Value.Add(line.Key);
         }
         else
         {
             wordsList.WordsCollection.Add(new KeyValuePair<string, List<long>>(word, new List<long>((int) line.Key)));
         }
     }
 }
Esempio n. 2
0
 static int Main(string[] args)
 {
     if (args.Length == 0)
     {
         Console.WriteLine("You must specify file to read from");
         return 1;
     }
     string fileToRead = args[0];
     if (!File.Exists(fileToRead))
     {
         Console.WriteLine("File You specified doesn't exist");
         return 2;
     }
     var wordsListFactory = new WordsListFactory(); 
     Console.WriteLine("Start processing file");
     Parallel.ForEach(File.ReadLines(fileToRead), (line, _, lineNumber) =>
     {
         if (!string.IsNullOrEmpty(line))
         {
             var lineWords = new KeyValuePair<long, List<string>>(lineNumber + 1, new List<string>());
             Regex.Split(line, "[^A-Za-z0-9]")
                 .Where(s => !string.IsNullOrWhiteSpace(s))
                 .ToList()
                 .ForEach(w => lineWords.Value.Add(w.ToLower()));
             AddLine(wordsListFactory, lineWords);
         }
     });
     var pathToWrite = args.Length > 1
         ? args[1]
         : string.Format(@"{0}\{1}", Directory.GetCurrentDirectory(), "Result.txt");
     var resultFile = new StreamWriter(pathToWrite, true);
     Parallel.ForEach(wordsListFactory.WordsLists, list => list.WordsCollection.OrderBy(w => w));
     foreach (var wordsList in wordsListFactory.WordsLists.OrderBy(x => x.FirstChar))
     {
         foreach (var word in wordsList.WordsCollection)
         {
             resultFile.WriteLine(string.Format("{0} - [{1}]", word.Key, string.Join(",", word.Value)));
         }
     }
     resultFile.Close();
     return 0;
 }