Страница: 1 | 2 | 3 |
Вопрос: Вопрос по поводу обработки html тегов
Добавлено: 31.10.06 01:49
Автор вопроса: Invise
Ответы
Всего ответов: 38
Номер ответа: 16
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #16
Добавлено: 03.11.06 18:12
Ты не путаешь скорость исполнения со скоростью написания? Дай сам паттерн и я напишу для него соответствующий код.
Номер ответа: 17
Автор ответа:
-АлександР-
Вопросов: 55
Ответов: 1008
Web-сайт:
Профиль | | #17
Добавлено: 03.11.06 18:22
Не знал, что такая есть.
Уже скачал, изучаю
Номер ответа: 18
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #18
Добавлено: 03.11.06 19:10
Разумеется нет, я прекрасно понимаю о чем идет речь..
Ок, стандартный паттерн поиска адресов
Dim matches As MatchCollection = regEx.Matches(Mail.Trim)
В итоге на выходе имеем MatchCollection
Номер ответа: 19
Автор ответа:
-АлександР-
Вопросов: 55
Ответов: 1008
Web-сайт:
Профиль | | #19
Добавлено: 03.11.06 20:29
Не знал, что такая есть.
Уже скачал, изучаю
Посмотрел я на ссылку, ничего он не преобразовывает:
Ну разве это преобразование
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
#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 и на халяву код писал.. Неее.. однозначно pwd угнали..
Номер ответа: 22
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #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-сайт:
Профиль | | #24
Добавлено: 04.11.06 17:02
В общем, писать разбор текста по регекспу проверки валидности мыла меня заломало, потому что там получается до черта кода, поэтому для демонстрации идеи я написал код для простейшего регекспа на тексте размером 1 МБ. Цикл с присвоением результата строке необходим, т.к. дотнетовские регекспы читерят и ВООБЩЕ не производят никаких вычислений, если не попросить результат. На тестовом файле получалось около 200 тысяч совпадений.
{
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 больше ускоряет работу варианта с кодом):
=====
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-сайт:
Профиль | | #26
Добавлено: 05.11.06 00:08
С каких это пор скорость кода на языке высокого уровня зависит от его объема? (Перевод с интеллигентного: сам-то понял, какую чушь сморозил? )
При компиляции паттерна (по-ламерски названной тобой разбором) как раз и получается подобный код
len[cres] = i - m;
Этим указанные 2 строки и занимаются. В случае наличия подмасок массивы создаются двухмерные и при завершении подмаски в зависимости от текущего состояния автомата в них засовывается текущее начало подмаски и ее длина.
20 wmz. Развеивать твои заблуждения путем написания многокилобайтового кода за бесплатно никто не будет, даже сне.
Номер ответа: 27
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #27
Добавлено: 05.11.06 00:33
Аааа... ну теперь все понятно... Так бы сразу и сказал, что:
это обычный треп и понты ...
Номер ответа: 28
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #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 и т.д..
- Будет работать бысрее встроенного регэкспа.
По моему справедливо, нет?
А если не сможешь, то я думаю ты сам знаешь куда придется засунуть тебе твой язык...