Homework: Streams and Files - Problem 3. Word Count
Здравейте!
Дали може малко помощ за тази задача. В момента съм написал код който търси по предварително зададена дума и ред т.е. не търси автоматично всичките думи и т.н.
Молбата ми е, може някой да help-не да направя регекс с който да разкарам всичките символи които не са думи от всеки ред на текста.
Второто да се направят циклите да върти през всички думи и редове на текста. Предполагам, че това ще се оправи като се оправи регекс защото сега ако сложа While цикъл вътре в using-a не мога да направя нищо след него, мисля че заради Replace-a в стринг currentSentence. Както и да е, направих го така само за да подкарам логиката.
Оценявам всяка помощ! Благодаря!
Да, видях го този вариант, ще се опитам да го разбера и него.
Иначе успях да го подкарам така ей сега:
http://pastebin.com/Dg0wFTt1
Предполагам има доста по-хитри начини, но това измислих само.
Чак по-умен не е, но това скалъпих от поглеждане тук и там:
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
namespace _3.WordCount
{
class Program
{
static void Main(string[] args)
{
Dictionary<string, int> wordAndFrequency = new Dictionary<string, int>();
string[] words = File.ReadAllText("../../../words.txt").Split();
using (StreamReader reader = new StreamReader("../../../input.txt"))
{
string currentLine = reader.ReadLine();
while (currentLine != null)
{
string[] wordsInCurrentLine = currentLine.ToLower()
.Split(new[] { ' ', '.', ',', '-', '?', '!', ':', ';' }, StringSplitOptions.RemoveEmptyEntries);
foreach (var word in words)
{
foreach (var item in wordsInCurrentLine)
{
if (word == item)
{
if (wordAndFrequency.ContainsKey(item) == false)
{
wordAndFrequency.Add(item, 0);
}
wordAndFrequency[item]++;
}
}
}
currentLine = reader.ReadLine();
}
}
using (StreamWriter writer = new StreamWriter("../../../output.txt"))
{
foreach (var item in wordAndFrequency.OrderByDescending(x => x.Value))
{
writer.WriteLine($"{item.Key} - {item.Value}");
}
}
}
}
}
Привет,
Решението ти е добро, но не фукнционира правилно, поради следното:
https://ibb.co/jVyHRTF
тук ти беше казал: string[] words = inputWords.Split(new string[] {Environment.NewLine}, StringSplitOptions.None);
което не подрежда елементите в масив, а ги прави на един ред, следователно не може да се обходят всичките елементи на inputWords, за да бъдат сравнени с currentSentence от StreamReader- а.
Поздрави,
Илиян Янчев