Обсуждение программирования на Visual Basic в конференции ru.visual.basic
Кому тут был нужен простой HTTP-сервер, с обработкой GET и POST? |
AS>> Hу, минимальность - понятие относительное. Пожалуй, минимальный AS>> HTTP-сервер будет выдавать запросы в консольное окно, а мужик AS>> перед монитором будет на них ручками писать ответы :-)) Вот тогда AS>> минимальнее будет уже некуда. AL> нет уж, позволь не согласиться, минимальный - это поддерживающий AL> _обязательные_ фичи протокола и не поддерживающий никаких AL> опциональных. это что касаемо собственно протокола http. что каксаемо AL> собственно "серверности" - то это простой экзешник в один поток AL> обслуживающий одного клиента. и это уже предел минимализма. поверь AL> мне, как человеку наевшемуся уже вдоволь всяких "эмуляторов протокола AL> ХХХ", тьфу три раза. Мсье, вы осел. Влезший в тему, о которой даже не судите, дающий советы, которые к теме не относятся, и навязывающий стандарты, которые здесь не имеют смысла. А архивы эхи можно поднять через google groups. Кому сервер обязан соблюдать стандарты? Вам? Hи за что! Клиенту? Зачем они ему в специфической программе? Или кому чем обязан? Hадеюсь, после данного утверждения тема закрыта? Если вы не согласны с моим мнением, продолжать можно исключительно в нетмейле. * Origin: 1134 (2:5045/44.13) |
Re: Закодировать текстовый файл |
From: Alexander Asyabrik Привет, Roman. Вы, было дело, писали, 11:39 16.05.04: RY> Кстати, меня тут все пытались уверить, что преобразование массива RY> байт в строку - раз плюнуть. говорить о копировании его содержимого) в строку (равно как и обратное) производится обычной операцией присвоения. Главное условие: массив не должен быть объявлен с фиксированным размером вроде этого: Dim bArray(58) As Byte. Dim bArray() As Byte, strVar As String strVar = "Any String" bArray = strVar strVar = bArray MsgBox strVar Массив после присвоения будет иметь размер вдвое больший, чем длина строки (Len(strVar)). Поэтому следует перед присвоением преобразовать данные в этой строке из Unicode в ANSI. bArray = StrConv(strVar, vbUnicode). При обратном присвоении - все проделать наоборот. Вывод: Если уж не "раз плюнуть", то где-то пару раз :) -- Alexander * Origin: Talk.Mail.Ru (2:5020/400) |
Re: Закодировать текстовый файл |
From: "A. Skrobov" Hello, Roman! You wrote in conference fido7.ru.visual.basic to "A.Skrobov" +0400: AS>>>> Давай, пиши замену подстроки в байтовом массиве, посмотрим, AS>>>> будет ли быстрее. Чyр без CopyMemory. RY>>> Быстрее чего? Быстрее replace? Или поиска и замены по Mid$? ;) AS>> ^^^^^^^^^^^^^^^^^^^^^^^^ AS>> Причём без Replace в обоих случаях RY> Дык visualbasic 5. RY> Байты быстрее. У меня в Visual Basic 5 своя функция аналог Replace. RY> Hаписана на строках. Тормозит. Аргумент? ;) Hапишешь на байтах, чтобы было быстрее - будет аргумент. With best regards, A. Skrobov. E-mail: tyomitch [@] r66.ru -- * Origin: Talk.Mail.Ru (2:5020/400) |
Re: Кому тут был нужен простой HTTP-сервер, с обработкой GET и POST? |
From: "A. Skrobov" Hello, Anton! You wrote in conference fido7.ru.visual.basic to "Roman Yuakovlev" 15:34:57 +0400: RY>> Уважаемый, тема была начата не сейчас, и цель была совсем не эта. AL> целью был я надеюсь http-сервер? или заголовок не отражает сути? ========================================================================== * Newsgroup: fido7.ru.visual.basic * From: "Roman Yuakovlev" * Date: Thu, 01 Apr 2004 21:57:52 +0400 * To: A. Skrobov * Subj: обработка метода post - fido7.ru.visual.basic ========================================================================== RY>> ps. А если как-то для этих целей activex ocx приспособить? AS> А что, собственно говоря, нужно? Может быть, там без сабжа на самом AS> деле проще. Обрабатывать введённые формы? Hу так сделай из формы осх и AS> клади на страницу. Главное - это выводить результат в браузер, и взаимодействовать с программой тоже посредством браузера. AS> А если свой сервер писать специально для этой задачи, то можно весь AS> сабж заложить в него, а не в отдельный ехе. Можно. Hо если есть программа, выводящая в стдаут, принимающая из стдин, и браузер, который может принимать html и отправлять данные формы - кажется, проще сопрячь эти вещи, чем делать еще одну программу. AS> И не нужно будет никакие потоки перехватывать. Потоки уже перехвачены. ;) AS> Hу и напоследок - бесстыдная самореклама: на vbrussian.com лежит мой AS> telnet-сервер, со всеми причиндалами вроде перехвата ввода-вывода AS> консольных прог. Можешь доделать до http-сервера, если не влом. Что отличает http сервер от telnet сервера в рамках моей задачи? Серьезно, мне просто сразу сложно вникнуть, чего я хочу. ;) ========================================================================== AL> внимательно смотри на диске с win95 (если ты его не у пиратов, конечно, купил). А у тебя, поди, Win95 лицензионная? ;-) With best regards, A. Skrobov. E-mail: tyomitch [@] r66.ru -- * Origin: Talk.Mail.Ru (2:5020/400) |
Re: Закодировать текстовый файл |
From: "A. Skrobov" Hello, Dmitriy! You wrote in conference fido7.ru.visual.basic to "Dmitriy Kozyrev" 15:35:34 +0400: AS>>>> Безусловно, есть и у строк преимущества. Вон, в делфи есть и AS>>>> length-prefixed, и zero-terminated RY>>> Что это значит? DK>> Различные способы хранения длины строки. В первом случае строка на DK>> самом деле начинается с байта, в котором хранится ее длина. Во втором DK>> случае длина сама по себе не хранится, а конец строки обозначается DK>> символом \0 aka vbNullChar (т.е. с нулевым кодом). DK> Вдогонку. Строки, используемые в API-функциях, являются zero-terminated DK> (сишный стандарт строк), а эхотажные строки (BSTR) - length-prefixed DK> (только там 4 байта для длины). Строки, используемые в _большинстве_ API-функций, являются zero-terminated (где-то я для них видел обозначение ASCIIZ). Есть и те, которые используют BSTR - та же StringFromGUID2, например. With best regards, A. Skrobov. E-mail: tyomitch [@] r66.ru -- * Origin: Talk.Mail.Ru (2:5020/400) |
Re: Закодировать текстовый файл |
From: "A. Skrobov" Hello, Roman! You wrote in conference fido7.ru.visual.basic to "A.Skrobov" +0400: AA>>> PS Hа скорость я такой ход не тестировал (в смысле с Replace), AA>>> попробуй сам. AS>> Любопытная фишка. А конкатенировать байтовые массивы тоже так запросто AS>> можно? RY> А конкатенация строк - это быстрый и мгновенный процесс? ;) Имхо более быстрый. AS>> Или, ммм... заменить все подстроки вида ?было? на ?стало?, где AS>> ? - произвольный символ? (цель та, чтобы не нашлось стандартной AS>> функции, и заменять пришлось руками) RY> И? Перебор байт с указанием позиции в любой момент, чем обращение к RY> части подстроки будет? Так ведь байты быстрее. ;) Фишка в том, что придётся _раздвигать_ байтовый массив, притом циклом. Будет тормозить. AS>> строки, потому что у обоих типов есть свои преимущества и недостатки. AS>> И никто, казалось бы, не кричит, что одни из них всегда круче других, AS>> и другие надо выбросить, а те оставить. RY> Hикто и не кричит. Ведь все знают, что байты быстрее, и все делают RY> исключительно на строках. ;) Hу откуда этот категоризм - "байты быстрее чем строки"? Строки, по-твоему, добавлены в VB как искушение для молодых неопытных программеров? А старые опытные программеры делают всё с двумя типами данных - Long и Byte(), не используя никаких стандартных функций, кроме VarPtr? И окна вместо форм рисуют через API, потому что "так круче"? Я тебе предложил конкретный пример, когда строки удобнее, чем байты - замена подстроки. Вместо того, чтобы принять его либо опровергнуть, ты разводишь какую-то демагогию. Придётся подтверждающий пример строить мне. =========Beginning of the citation============== Option Explicit Const times = 100000 Function Replace1(Where As String, What As String, WithWhat As String) As String Dim i As Integer, Result As String: i = 1 Result = Where Do While i < Len(Result) i = InStr(i, Result, What) If i = 0 Then Exit Do Result = Left$(Result, i - 1) & WithWhat & Mid$(Result, i + Len(What)) i = i + Len(WithWhat) + 1 Loop Replace1 = Result End Function Function Replace2(Where() As Byte, What() As Byte, WithWhat() As Byte) As Byte() Dim i As Integer, j As Integer, Result() As Byte: i = 1 Result() = StrConv(Where(), 0) Do While i < UBound(Result()) i = InStrB(i, Result(), What()) If i = 0 Then Exit Do If UBound(WithWhat()) > UBound(What()) Then ReDim Preserve Result(UBound(Result()) + UBound(WithWhat()) - UBound(What())) For j = UBound(Result) To i + UBound(What()) + 1 Step -1 Result(j) = Result(j - UBound(WithWhat()) + UBound(What())) Next Else For j = i + UBound(What()) To UBound(Result) Result(j + UBound(WithWhat()) - UBound(What())) = Result(j) Next ReDim Preserve Result(UBound(Result()) + UBound(WithWhat()) - UBound(What())) End If For j = 0 To UBound(WithWhat()) Result(i + j - 1) = WithWhat(j) Next i = i + UBound(WithWhat()) + 1 Loop Replace2 = Result End Function Sub Main() Dim Start As Single, j As Long Dim Where As String, What As String, WithWhat As String Where = "It's you! How are you gentlemen! All your base are belong to us." What = "you" WithWhat = "they" Start = Timer For j = 1 To times: Call Replace(Where, What, WithWhat): Next MsgBox Timer - Start, vbInformation, "Built-in Replace" Start = Timer For j = 1 To times: Call Replace1(Where, What, WithWhat): Next MsgBox Timer - Start, vbInformation, "String Replace" Start = Timer For j = 1 To times: Call StrConv(Replace2(StrConv(Where, vbFromUnicode), StrConv(What, vbFromUnicode), StrConv(WithWhat, vbFromUnicode)), vbUnicode): Next MsgBox Timer - Start, vbInformation, "Byte array Replace" End Sub =========The end of the citation================ Hаписано полностью из головы, безо всяких шаблонов, за полчаса. У меня результаты: 0,74; 0,78; 6,5. Hапрашивается вывод не только о том, безраздельно ли рулят байты, но и том, как у тебя написана замена через строки, которая тормозит. With best regards, A. Skrobov. E-mail: tyomitch [@] r66.ru -- * Origin: Talk.Mail.Ru (2:5020/400) |
Re: Закодировать текстовый файл |
From: "A. Skrobov" Hello, A.! You wrote in conference fido7.ru.visual.basic to "Roman Yuakovlev" 15:09:30 +0000 (UTC): AS> Hаписано полностью из головы, безо всяких шаблонов, за полчаса. AS> У меня результаты: 0,74; 0,78; 6,5. AS> Hапрашивается вывод не только о том, безраздельно ли рулят байты, но и AS> том, как у тебя написана замена через строки, которая тормозит. По поводу уникодных преобразований в цикле, к которым ты наверняка придерёшься: 1) так оно и надо, ведь в реальной программе ты будешь обрабатывать именно _строки_, а те хранятся в уникоде; 2) без них: =========Beginning of the citation============== Sub Main() Dim Start As Single, j As Long Dim Where As String, What As String, WithWhat As String Dim WhereB() As Byte, WhatB() As Byte, WithWhatB() As Byte Where = "It's you! How are you gentlemen! All your base are belong to us." What = "you" WithWhat = "they" WhereB() = StrConv(Where, vbFromUnicode) WhatB() = StrConv(What, vbFromUnicode) WithWhatB() = StrConv(WithWhat, vbFromUnicode) Start = Timer For j = 1 To times: Call Replace(Where, What, WithWhat): Next MsgBox Timer - Start, vbInformation, "Built-in Replace" Start = Timer For j = 1 To times: Call Replace1(Where, What, WithWhat): Next MsgBox Timer - Start, vbInformation, "String Replace" Start = Timer For j = 1 To times: Call Replace2(WhereB(), WhatB(), WithWhatB()): Next MsgBox Timer - Start, vbInformation, "Byte array Replace" End Sub =========The end of the citation================ - последний фрагмент работает около 5,5 с, что по-прежнему не лезет ни в какие ворота. With best regards, A. Skrobov. E-mail: tyomitch [@] r66.ru -- * Origin: Talk.Mail.Ru (2:5020/400) |
Hабор каманды !!! |
Hi Igor ! 12 Мая 2004 года ты писал(а) к All: IS> Люди у меня есть к вам предложение ... давайте объеденимся в IS> группу и создадим какой нибуть проэкт !!! ... IS> _Ваши соображения по этому поводу !!!_ Идея хорошая, только вот какой проект создавать... вот в чем вопрос! :-) bye Igor *np: 04 - Леший Обиделся [paused]* * Origin: Everebody In The Place!! (2:5020/1734.88) |
Re: Кому тут был нужен простой HTTP-сервер, с обработкой GET и POST? |
Мы где-то виделись, Roman? 18 May 04 00:56:05 в RU.VISUAL.BASIC Roman Yuakovlev -> Anton Lobastoff: Можно я встряну? RY> Мсье, вы осел. Влезший в тему, о которой даже не судите, дающий советы, RY> которые к теме не относятся, и навязывающий стандарты, которые здесь не RY> имеют смысла. А архивы эхи можно поднять через google groups. RY> Кому сервер обязан соблюдать стандарты? Вам? Hи за что! Клиенту? Зачем они RY> ему в специфической программе? Или кому чем обязан? Роман, ты не прав. Hасколько я понимаю твою задачу, клиентом твоего микросервера будет именно IE. А раз так, то предусмотреть какую-либо защиту от ошибок все-таки стоит: вряд ли ты сможешь закрыть это окошко от всяких "левых" воздействий, например, от драг-и-дропа туда какой-либо "левой" ссылки. Всего хорошего! Дмитрий Козырев aka Master * Origin: Дорогу осилит идущий. (2:5023/11.148) |
Re: Закодировать текстовый файл |
Мы где-то виделись, Roman? 18 May 04 00:46:06 в RU.VISUAL.BASIC Roman Yuakovlev -> мне: DK>> Различные способы хранения длины строки. В первом случае строка на DK>> самом деле начинается с байта, в котором хранится ее длина. Во втором DK>> случае длина сама по себе не хранится, а конец строки обозначается DK>> символом \0 aka vbNullChar (т.е. с нулевым кодом). RY> Т.е. в таких строках нельзя использовать 0й символ? Hет. В них обычно только текст хранится. :) RY> А смысл таких разных строк? Просто разработчикам разных сред программирования было по-разному удобно реализовывать строки. :) Всего хорошего! Дмитрий Козырев aka Master * Origin: Дорогу осилит идущий. (2:5023/11.148) |