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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Регулярные выражения в цикле, Как ускорить и сделать понятней код? 
:(
    Опции темы
Suppir
Дата 11.3.2012, 13:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 588
Регистрация: 20.4.2009

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



1. Мне нужно использовать несколько регулярных выражений при переборе массива. Но код работает слишком медленно (на Perl быстрей в несколько раз). Что делаю не так?

Код

            for (int x = 0; x < gar.Length; x++)
            {
                gar[x] = Regex.Replace(gar[x], "^\\d+\\t", "", RegexOptions.Compiled);
                gar[x] = Regex.Replace(gar[x], "[  ]+", " ", RegexOptions.Compiled);
                gar[x] = Regex.Replace(gar[x], "[“”]", "\"", RegexOptions.Compiled);
                resultGar += gar[x] + "\r\n\r\n";
            }




2. Как вернуть 1, если первым символом строки gar[x] является знак "(" ?


PM MAIL   Вверх
Stolzen
Дата 11.3.2012, 13:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1041
Регистрация: 17.10.2005

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



Массив большой?


--------------------
datatalks.ru - анализ данных, статистика, машинное обучение
PM MAIL WWW   Вверх
Suppir
Дата 11.3.2012, 13:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 588
Регистрация: 20.4.2009

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



5000 элементов. 

Мне кажется, что проблема в использовании регулярных выражений внутри цикла. Но Perl обрабатывает моментально (на порядок быстрей). Как правильно объявлять такие регулярные выражения?

Если то что  "искать" объявлять вне цикла, а то, на что заменить - внутри, то код непонятным становится. 

Это сообщение отредактировал(а) Suppir - 11.3.2012, 13:20
PM MAIL   Вверх
Stolzen
Дата 11.3.2012, 13:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1041
Регистрация: 17.10.2005

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



5000? Попробуйте StringBuilder для соединения строк


--------------------
datatalks.ru - анализ данных, статистика, машинное обучение
PM MAIL WWW   Вверх
Suppir
Дата 11.3.2012, 13:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 588
Регистрация: 20.4.2009

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



Т.е. проблема не в регулярных выражениях, а в соединении строк?

И еще, обязательно ли использовать RegexOptions.Compiled или можно обойтись без него?
PM MAIL   Вверх
Stolzen
Дата 11.3.2012, 13:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1041
Регистрация: 17.10.2005

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



Цитата(Suppir @  11.3.2012,  14:32 Найти цитируемый пост)
Т.е. проблема не в регулярных выражениях, а в соединении строк?

Думаю, что в соединениях, да. 

Цитата(Suppir @  11.3.2012,  14:32 Найти цитируемый пост)
И еще, обязательно ли использовать RegexOptions.Compiled или можно обойтись без него? 

http://www.codinghorror.com/blog/2005/03/t...to-compile.html гляньте тут. Вообще не возьмусь однозначно утверждать, лучше это сделает кто-то более осведомленный. 


--------------------
datatalks.ru - анализ данных, статистика, машинное обучение
PM MAIL WWW   Вверх
Suppir
Дата 11.3.2012, 13:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 588
Регистрация: 20.4.2009

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



А по этому вопросу можете подсказать?

Как вернуть "true", если первым символом строки gar[x] является знак "(" ?

PM MAIL   Вверх
Stolzen
Дата 11.3.2012, 13:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1041
Регистрация: 17.10.2005

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



Код

if (gar[x].StartsWith("(")) 
{
    return true;
}



--------------------
datatalks.ru - анализ данных, статистика, машинное обучение
PM MAIL WWW   Вверх
Suppir
Дата 11.3.2012, 13:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 588
Регистрация: 20.4.2009

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



Спасибо!

Добавлено через 4 минуты и 45 секунд
А еще, можно без регулярных выражений узнать, что
строка оканчивается на символ ">", после которого может быть, а может и не быть пробел?
PM MAIL   Вверх
Stolzen
Дата 11.3.2012, 14:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1041
Регистрация: 17.10.2005

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



Код

s.EndsWith(">") || s.EndsWith("> ")



--------------------
datatalks.ru - анализ данных, статистика, машинное обучение
PM MAIL WWW   Вверх
Suppir
Дата 11.3.2012, 14:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 588
Регистрация: 20.4.2009

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



Еще один вопрос, пока вы не ушли!

У меня приложение с GUI.  После InitializeComponent() выполняются еще две функции. Но при запуске GUI отрисовывается только после того, как эти функции выполнятся. Мне же нужно, чтобы приложение сначала отрисовалось, а только потом эти функции запустились. Как это сделать?

Код

        public Form1()
        {
            InitializeComponent();
            LoadFiles();
            Prepare();
        }


Это сообщение отредактировал(а) Suppir - 11.3.2012, 14:03
PM MAIL   Вверх
Stolzen
Дата 11.3.2012, 14:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1041
Регистрация: 17.10.2005

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



В событие Load формы добавить это


--------------------
datatalks.ru - анализ данных, статистика, машинное обучение
PM MAIL WWW   Вверх
Suppir
Дата 11.3.2012, 14:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 588
Регистрация: 20.4.2009

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



А где это нужно прописать?

Код

namespace Программа
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            LoadFiles();
            Prepare();
        }
     }
}



То есть где нужно объявлять функции   LoadFiles() и  Prepare(), чтобы они выполнялись уже после того, как форма будет отображена?
PM MAIL   Вверх
Stolzen
Дата 11.3.2012, 14:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1041
Регистрация: 17.10.2005

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



Не помню smile Где-то в свойствах формы в IDE можно выбрать вкладку "события" и там нужно будет найти Load.


--------------------
datatalks.ru - анализ данных, статистика, машинное обучение
PM MAIL WWW   Вверх
Suppir
Дата 11.3.2012, 14:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 588
Регистрация: 20.4.2009

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



Нашел. Написал вот так, но все равно, сначала эти функции отрабатываются, а только потом форма отображается. А нужно, чтобы сначала запустилась программа, а потом начали функции отрабатывать. 

Код

namespace Программа
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
     }

     private void Form1_Load(object sender, EventArgs e)
     {
            LoadFiles();
            Prepare();
     }

}


PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

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


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

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


 




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


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

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