Loading...
onefen avatar onefen 27 Точки

[Homework] Streams and Files

Колеги имам въпрос по Problem{3} Word Count:

Как мога да си напрвя RegEx който да е case sensitive. Ни ми хващаше главните и малките букви като еднакви и затова ги обърнах всички на малки.

line = line.ToLower();
words[i] = words[i].ToLower();

Където words[i] ми е дума от файла words.txt, а line ми е ред прочетен от файла text.txt. Но това все още не ми решава проблема с - пред думите. в смисъл is и -Is за RegEx не са едно и също нещо. Pattern-а ми е:

string pattern = @"\b" + words[i] + @"\b";

какво да му добавя за да не взема тия тирета за част от думата?

Тагове:
1
C# Advanced
DHristoskov avatar DHristoskov 211 Точки

аз съм го направил така, ще се радвам да ти бъде от полза


                        string wordToMatch = reader.ReadLine();
                        string pattern = "\\b" + wordToMatch + "\\b";
                        int count = Regex.Matches(text, pattern, RegexOptions.IgnoreCase).Count;
                        dict.Add(wordToMatch, count);

1
onefen avatar onefen 27 Точки

А какво става ако във файла words.txt имаш по повече от една дума на ред?

Доколкото виждам ти четеш целия ред и в конкретния пример ще работи, но ако думите са една до друга разделени с интервал или с точки примерно ще работи ли? Аз мисля, че няма.

0
DHristoskov avatar DHristoskov 211 Точки

Write a program that reads a list of words from the file words.txt and finds how many times each of the words is contained in another file text.txt.Matching should be case - insensitive.

ами няма да работи то в условието никъде не е казано, да се съобразим с различно разделение на думите и аз се водя от него.

0
20/05/2015 23:35:23
onefen avatar onefen 27 Точки

Aма не и казано, че трябва да са по една дума на един ред. Аз за това исках да го направя да работи и ако си е нормален текстов файл, но нещо се омазаха нещата. Е ако не стане може и аз така да го направя ред по ред.

Другото което ми хрумва е да прочета целия файл words.txt да си го запиша в един стринг. И след това да си го разбия на масив от стингове по разделител интервал . - ! ? и нов ред. И тогава да проверявам със всеки един елемент на масива с RegEx дали го има в text.txt, но ми се струва, че ако файла е по-голям и искам да го прочета на веднъж доста ще се озори програмата.

0
20/05/2015 23:40:18
DHristoskov avatar DHristoskov 211 Точки

Аз съм го направил така целия текст е в един стринг и го проверявам за всяка дума по отделно като броя колко пъти се среща, не виждам проблем защото това е текстов файл, все пак ти няма да проверяваш файл с размер 1 гб.

0
20/05/2015 23:42:50
onefen avatar onefen 27 Точки

ще го помъча още но утре

то и сега брои, но не брои правилно нали уж IgnoreCase трябва да премахва тия разлики от малки големи букви и т.н, а то май не е точно така. Това fault например не иска да ми го преброи, а го има в текста просто има една . накрая

0
enevlogiev avatar enevlogiev 1168 Точки

StreamReader чете ред след ред. Защо просто на всеки ред не прилагате регекс, който хваща всички думи без точки, запетаи, и т.н., прилагате им .ToLower(), и ги пращате в един лист. Като приключи действието си, reader-a ще е минал целия файл, без значение колко редове са, вие ще имате всички думи в един лист и тези думи ще можете да ги правите каквото си искате.

Eто един пример

1. Чета файла, отделям думите.

2. Чета втория файл, за всяка от думите в него слагам по един запис в асоциативен масив, който ми пази колко пъти се среща.

3. Сортирам и записвам в трети файл.

3
21/05/2015 00:17:12
onefen avatar onefen 27 Точки

Задачатая тръгна и то без да използвам Регулярен израз.

Ето го крайният вариан, който дава верен резултат:

http://pastebin.com/eu8S3u4K

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.