Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 | 2 | 3 |

 

  Вопрос: Вопрос по поводу обработки html тегов Добавлено: 31.10.06 01:49  

Автор вопроса:  Invise

Ответить

  Ответы Всего ответов: 38  

Номер ответа: 16
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #16
Добавлено: 03.11.06 18:12
Ты не путаешь скорость исполнения со скоростью написания? Дай сам паттерн и я напишу для него соответствующий код.

Ответить

Номер ответа: 17
Автор ответа:
 -АлександР-



Вопросов: 55
Ответов: 1008
 Web-сайт: sham.clan.su
 Профиль | | #17
Добавлено: 03.11.06 18:22
http://www.free-ware.ru/284/free/vbto_converter_1_0/download/
СПАСИБО, avdey.
Не знал, что такая есть.
Уже скачал, изучаю :)

Ответить

Номер ответа: 18
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #18 Добавлено: 03.11.06 19:10
Ты не путаешь скорость исполнения со скоростью написания?

Разумеется нет, я прекрасно понимаю о чем идет речь..

Дай сам паттерн и я напишу для него соответствующий код.


Ок, стандартный паттерн поиска адресов
        Dim regEx As New Regex("[A-Z0-9._%-]+@(?:[A-Z0-9-]+\.)+[A-Z]{2,4}", RegexOptions.Singleline Or RegexOptions.IgnoreCase)
        Dim matches As MatchCollection = regEx.Matches(Mail.Trim)


В итоге на выходе имеем MatchCollection

Ответить

Номер ответа: 19
Автор ответа:
 -АлександР-



Вопросов: 55
Ответов: 1008
 Web-сайт: sham.clan.su
 Профиль | | #19
Добавлено: 03.11.06 20:29
http://www.free-ware.ru/284/free/vbto_converter_1_0/download/
СПАСИБО, avdey.
Не знал, что такая есть.
Уже скачал, изучаю :)
Мда... Не откажусь я от написания своего...
Посмотрел я на ссылку, ничего он не преобразовывает:
Ну разве это преобразование :)
Option Explicit
Dim m As Integer
Dim txt As String
Private Sub Command1_Click()
    ToCipher 45
End Sub

Public Function ToCipher(txt1 As String) As String
    m = 1
    While m <= Len(txt1)
    
        Dim Lengh As Byte
    
        If CInt(Mid(txt1, m, 3)) < 255 Then
            Lengh = 3
            txt = Chr(CInt(Mid(txt1, m, Lengh)) + 1)
            
        Else
            Lengh = 2
            txt = Chr(CInt(Mid(txt1, m, Lengh)) + 1)
            
        End If
        
        m = m + Lengh
        ToCipher = ToCipher + txt
    Wend
End Function

В С++ Builder
#include <vcl.h>
#pragma hdrstop

#include "Form1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------

//=========================================================
/*? Dim */ /*? As Integer
Dim *//*? As */
void __fastcall TForm1::Command1Click(TObject * Sender)
{
//#define def_Command1_Click
#ifdef def_Command1_Click
//Private Sub Command1_Click()
//    ToCipher 45
//End Sub

#endif // def_Command1_Click
}

AnsiString TForm1::ToCipher(AnsiString& txt1)
{
AnsiString ToCipher = "?";
//#define def_ToCipher
#ifdef def_ToCipher
/*****
Public Function ToCipher(txt1 As String) As String
    m = 1
    While m <= Len(txt1)

        Dim Lengh As Byte

        If CInt(Mid(txt1, m, 3)) < 255 Then
            Lengh = 3
            txt = Chr(CInt(Mid(txt1, m, Lengh)) + 1)

        Else
            Lengh = 2
            txt = Chr(CInt(Mid(txt1, m, Lengh)) + 1)

        End If

        m = m + Lengh
        ToCipher = ToCipher + txt
    Wend
End Function
*****/
/*? ( */ /*? )
//
        Dim */ /*? ( */ /*? )) < 255 Then */

/*? ( */ /*? ( */ /*? ( */ /*? )) + 1)
//
        Else */

/*? ( */ /*? ( */ /*? ( */ /*? )) + 1)
//
        End If */



/*? Wend */
#endif // def_ToCipher
return ToCipher;
}

Разве что создал указатель на форму и кнопку, котрые были :(

Ответить

Номер ответа: 20
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #20 Добавлено: 03.11.06 23:29
Ты не путаешь скорость исполнения со скоростью написания? Дай сам паттерн и я напишу для него соответствующий код.


Кто-то украл пароль Sharp'а :(
Если б это был настоящий Sharp, в конце была бы строчка типа
10 WMZ
или
20 WMZ

Рекомендую всем немедленно поменять пароли на свои акаунты и сообщить их мне.

Ответить

Номер ответа: 21
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #21 Добавлено: 04.11.06 13:09
Кто-то украл пароль Sharp:(

Блин, и правда, что то погорячился я... на самом деле как то странно, чтобы Sharp и на халяву код писал.. Неее.. однозначно pwd угнали.. :-)

Ответить

Номер ответа: 22
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #22
Добавлено: 04.11.06 15:23
Спокойно, кто сказал, что код я вам отдам? :)) Я вам только результаты бенчмарка дам. А код - да, за 20 wmz :)

Ответить

Номер ответа: 23
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #23 Добавлено: 04.11.06 16:40
Я вам только результаты бенчмарка дам


Не, ну так не пойдет.. где гарантия, что они не будут фальсифицированы? :-)
Да и потом, если на самом деле код красивый будет, так почему бы и не подучиться? Лично меня вон и sne и Brand, Павел и др.. в свое время поднатаскали по разным темам. И до сих пор у меня в коллекции их некоторые примеры (в которые я периодически подглядываю.. ) А ты, значит, свой только за WMZ?? Мда уж... ну никакой помощи таким как я - молодым, начинающим программистам..

Ответить

Номер ответа: 24
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #24
Добавлено: 04.11.06 17:02
В общем, писать разбор текста по регекспу проверки валидности мыла меня заломало, потому что там получается до черта кода, поэтому для демонстрации идеи я написал код для простейшего регекспа на тексте размером 1 МБ. Цикл с присвоением результата строке необходим, т.к. дотнетовские регекспы читерят и ВООБЩЕ не производят никаких вычислений, если не попросить результат. На тестовом файле получалось около 200 тысяч совпадений.

        private void button2_Click(object sender, EventArgs e)
        {
            uint tr1, tr2, tc1, tc2;
            string match;

            string str;
            StreamReader fs = new StreamReader(@"c:\1.txt";);
            str = fs.ReadToEnd();
            fs.Close();

            str = str.Substring(0, 1048576);

            // Регексп
            tr1 = Win32.timeGetTime();
            Regex r = new Regex(@"\d+", RegexOptions.Singleline);
            MatchCollection mc = r.Matches(str);
            for (int i = 0; i < mc.Count; i++)
            {
                match = mc[i].ToString();
                //textBox1.Text += match + "\r\n";
            }
            tr2 = Win32.timeGetTime();


            //textBox1.Text += "===================================\r\n";

            // Код
            tc1 = Win32.timeGetTime();
            int[] res = new int[str.Length];
            int[] len = new int[str.Length];
            int m = -1;
            int cres = 0;
            for (int i = 0; i < str.Length; i++)
            {
                char c = str[i];
                if (c >= '0' && c <= '9')
                {
                    if(m == -1) m = i;
                }
                else
                {
                    if (m != -1)
                    {
                        res[cres] = m;
                        len[cres] = i - m;
                        cres++;
                        m = -1;
                    }
                }
            }
            if (m != -1)
            {
                res[cres] = m;
                len[cres] = str.Length - m;
                cres++;
                m = -1;
            }
            for (int i = 0; i < cres; i++)
            {
                match = str.Substring(res[i], len[i];);
                //textBox1.Text += match + "\r\n";
            }
            tc2 = Win32.timeGetTime();


            textBox1.Text += "Regexp: " + (tr2 - tr1).ToString() + " ms; code: " + (tc2 - tc1).ToString() + " ms.\r\n";
        }


Результаты бенчмарка (очевидно, что Release больше ускоряет работу варианта с кодом):

Debug
=====

Regexp: 869 ms; code: 123 ms.
Regexp: 917 ms; code: 127 ms.
Regexp: 906 ms; code: 129 ms.
Regexp: 909 ms; code: 121 ms.
Regexp: 987 ms; code: 114 ms.

Release
=======

Regexp: 862 ms; code: 48 ms.
Regexp: 831 ms; code: 57 ms.
Regexp: 849 ms; code: 51 ms.
Regexp: 852 ms; code: 53 ms.
Regexp: 851 ms; code: 47 ms.


2EROS: слив защитан.

Ответить

Номер ответа: 25
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #25 Добавлено: 04.11.06 19:10
писать разбор текста по регекспу проверки валидности мыла меня заломало, потому что там получается до черта кода


Ключевая фраза.. получается до черта кода
Соответственно и работать он будет гораздо медленнее. И то, что ты написал.. это не бенчмарк, а туфта.. Речь шла о разборе паттерна, нахождении подстроки, извлечении,добавлением в именованную группу и т.д.. а не о тупом переборе еденичных символов. И чтобы говорить, что слив защитан, ты сначала сделай бенчмарк по человечески, с соблюдением всех условий договоренности, тебя за язык никто не тянул!
Дай сам паттерн и я напишу для него соответствующий код.

Я дал паттерн, где код?

Ответить

Номер ответа: 26
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #26
Добавлено: 05.11.06 00:08
Соответственно и работать он будет гораздо медленнее.

С каких это пор скорость кода на языке высокого уровня зависит от его объема? (Перевод с интеллигентного: сам-то понял, какую чушь сморозил? :))
разборе паттерна

При компиляции паттерна (по-ламерски названной тобой разбором) как раз и получается подобный код
извлечении

                        res[cres] = m;
                        len[cres] = i - m;

Этим указанные 2 строки и занимаются. В случае наличия подмасок массивы создаются двухмерные и при завершении подмаски в зависимости от текущего состояния автомата в них засовывается текущее начало подмаски и ее длина.
Я дал паттерн, где код?

20 wmz. Развеивать твои заблуждения путем написания многокилобайтового кода за бесплатно никто не будет, даже сне.

Ответить

Номер ответа: 27
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #27 Добавлено: 05.11.06 00:33
Аааа... ну теперь все понятно... Так бы сразу и сказал, что:
Дай сам паттерн и я напишу для него соответствующий код.

это обычный треп и понты ...

Ответить

Номер ответа: 28
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #28
Добавлено: 05.11.06 12:14
EROS, ты обкакался, причем публично, и пытаешься теперь отвлечь от этого внимание тем, что я привел пример, который можно написать за 10 минут вместо примера, который ты попросил, несмотря на то, что он демонстрирует все основные приемы, используемые функциями работы с регекспами, а так же подавляющее преимущество в скорости, которое будет тем более заметно, чем сложнее будет паттерн.

Ответить

Номер ответа: 29
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #29 Добавлено: 05.11.06 16:21
То, что ты привел.. это даже примером не назовешь.. Это даже ОТДАЛЕННО не имитирует работу регэкспа, это и новичок с месячным стажем напишет! И нефига тут людям туфту гнать! Речь шла не о поиске ОДНОГО символа,а о реализации работы паттерна!

И бенчмарк будет справедлив только при равных условиях, и именно ты обещал продемонстрировать полноценную замену регэкспу. А раз ты не способен полноценно имитировать работу того паттерна, что я дал, так и нечего тут пальцы теперь гнуть. Раз обгадился, так хоть имей мужество признать это. И научитсь отвечать за свои слова..

Ответить

Номер ответа: 30
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #30 Добавлено: 05.11.06 16:33
И если ты снова тут будешь гнуть пальцы, что за бесплатно такое никто делать не будет, то я готов заплатить затребованные тобой 20 WMZ за код!
При условии, что он:
 - Будет на VB.NET
 - Будет полностью реализовывать тот паттерн, что я дал
 - Будет использовать встроенные ф-и работы со строками InStr, Mid и т.д..
 - Будет работать бысрее встроенного регэкспа.

По моему справедливо, нет?

А если не сможешь, то я думаю ты сам знаешь куда придется засунуть тебе твой язык...

Ответить

Страница: 1 | 2 | 3 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам