Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Игнорирование коментариев при чтении файла, как проигнорировать все коментарии 
V
    Опции темы
godvinn
  Дата 23.6.2009, 16:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 407
Регистрация: 4.4.2008
Где: possibility of mo ving to Kyiv

Репутация: нет
Всего: 1



Есть у меня исходный файл в котором подсчитывается количество строк  Предыдущая Тема, при чтении всего файла есть погрешность так как в комментариях и выводах тоже могут быть слова - название операторов.

Как при чтении всего файла проигнорировать строки комментарием (/**/, //) и выводов (printf). smile  


--------------------
Everything happens in life.
user posted image
PM MAIL   Вверх
diadiavova
Дата 24.6.2009, 13:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 31
Всего: 142



Можно, например, подсчитать все слова, а потом вычесть расположенные в комментариях
Код

        static int WordCount(string source, string searchWord)
        {
            Regex full = new Regex(@"\b" + searchWord + @"\b");
            Regex comments = new Regex(@"(?<=(/\*)[^(?s:\*/)]*)\b" + searchWord +
                @"\b|(?<=//(?m:[^\n])*)\b"+ searchWord +@"\b");
            return full.Matches(source).Count - comments.Matches(source).Count;
        }





--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
godvinn
Дата 24.6.2009, 15:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 407
Регистрация: 4.4.2008
Где: possibility of mo ving to Kyiv

Репутация: нет
Всего: 1



а для выводов - printf, cout, echo, print можно подсчитать а потом вычитать с основного результата *?
То есть как функция wordCount только регулярное выражение для операторов вывода.


--------------------
Everything happens in life.
user posted image
PM MAIL   Вверх
diadiavova
Дата 24.6.2009, 15:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 31
Всего: 142



То есть? Не понял я чойт. В любом случае, я это предложил как вариант. Можно найти и другие.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
godvinn
Дата 24.6.2009, 15:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 407
Регистрация: 4.4.2008
Где: possibility of mo ving to Kyiv

Репутация: нет
Всего: 1



ну это мне подходит предложенный твой вариант. Но при поиске операторов, например if:

cout << "if long - ";

слово if воспримется как оператор if то есть уже будет погрешность. То есть нужно еще не включать в общий подсчет все похожие слова на операторы if в выводах. 
 


--------------------
Everything happens in life.
user posted image
PM MAIL   Вверх
diadiavova
Дата 24.6.2009, 15:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 31
Всего: 142



Ты имеешь в виду строковые литералы?


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
godvinn
Дата 24.6.2009, 16:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 407
Регистрация: 4.4.2008
Где: possibility of mo ving to Kyiv

Репутация: нет
Всего: 1



я имею ввиду: 
есть файл с расширением .с
загружаем его считаем количество операторов (которые переданы  например if)
в файле например 3 условных оператора if, 
но еще в комментариях есть слово if, и в выводе на экран через оператор cout << "if " тоже встречается это слово (if), то есть их уже 5,  мне надо чтобы выводило только то количество которое не встречается в комментариях и не встречается в операторах вывода, то есть должно вывести 3.

то есть строки с printf, cout, echo, print, тоже должны игнорироваться как и комментарии.





--------------------
Everything happens in life.
user posted image
PM MAIL   Вверх
diadiavova
Дата 24.6.2009, 16:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 31
Всего: 142



А когда ты инициируешь строковую переменную, текстом содержащим "if"?
Код

myVar = "if";

Это разве не то же самое?

Тут решение примерно такое же. Надо просто регесп составить для литералов и вычесть его тоже или добавить в тот, который описывает комментарии.

Добавлено через 25 секунд
Собственно идея то в этом была.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
godvinn
Дата 24.6.2009, 16:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 407
Регистрация: 4.4.2008
Где: possibility of mo ving to Kyiv

Репутация: нет
Всего: 1



ну да мне надо чтобы воспринимало только (например if) как оператор а не как комент или чтото другое. А можешь помочь с регуляркой *? пожалуйста  smile 


--------------------
Everything happens in life.
user posted image
PM MAIL   Вверх
diadiavova
Дата 25.6.2009, 00:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 31
Всего: 142



Ну я тут изменил малость тот метод, вроде работает
Код

        static int WordCount(string source, string searchWord)
        {
            string strLit =  "(?<=[^\"\n]*(\"[^\"\n]*\")*\"[^\"\n]*)\\b" + searchWord + @"\b";
            Regex full = new Regex(@"\b" + searchWord + @"\b");
            Regex comments = new Regex(@"(?<=(/\*)[^(?s:\*/)]*)\b" + searchWord +
                @"\b|(?<=//(?m:[^\n])*)\b"+ searchWord +@"\b|" + strLit);
            return full.Matches(source).Count - comments.Matches(source).Count;
        }



--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.1675 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.