Ejemplo n.º 1
0
        /// <summary>
        /// Tworzy plik dla danego katalogu z posumowanymi wsystkimi wyst¹pieniami s³ów.
        /// Zostaje przeszukany tylko ten katalog - podkatalogi nie s¹ uwzglêdniane.
        /// </summary>
        /// <param name="sourceDir">Katalog, w którym znajduj¹ siê pliki z danymi.</param>
        /// <param name="pattern">Wzorzec plików, dla których ma byæ sumowanie np. ".cat".</param>
        /// <param name="resultFileName">Œcie¿ka do pliku z wynikami.</param>
        public static void SumWords(String sourceDir, String pattern, String resultFileName)
        {
            //Dictionary<String, int> wordsInFiles = new Dictionary<String, int>();
            Dictionary <String, WordInfo> wordsInFiles = new Dictionary <String, WordInfo>();
            DirectoryInfo sourceDirInfo = new DirectoryInfo(sourceDir);

            foreach (FileInfo sourceFile in sourceDirInfo.GetFiles(pattern)) //przechodzê przez wszystkie pliki
            {
                Console.WriteLine("Processing file: " + sourceFile);
                StreamReader sr = new StreamReader(sourceFile.FullName);
                String       tmpLine;
                //String[] splittedLine;
                while ((tmpLine = sr.ReadLine()) != null && tmpLine.Length > 0)
                {
                    //splittedLine = tmpLine.Split(' ');
                    //String word = splitedLine[0];
                    //int count = int.Parse(splitedLine[1]);
                    WordInfo newWordInfo = WordInfo.Parse(tmpLine);
                    //dodanie s³owa do s³ownika lub zwiêkszenie jego wartoœci
                    if (wordsInFiles.ContainsKey(newWordInfo.Word))
                    {
                        WordInfo storedWordInfo = wordsInFiles[newWordInfo.Word];
                        storedWordInfo.Count        += newWordInfo.Count;
                        storedWordInfo.InclDocCount += newWordInfo.InclDocCount;
                    }
                    else
                    {
                        wordsInFiles.Add(newWordInfo.Word, newWordInfo);
                    }
                }
                sr.Close();
            }
            //utworzenie pliku wynikowego
            FileStream   fs = new FileStream(resultFileName, FileMode.Create);
            StreamWriter sw = new StreamWriter(fs);

            foreach (String word in wordsInFiles.Keys)
            {
                sw.WriteLine(wordsInFiles[word]);
            }
            sw.Close();
            fs.Close();
        }