Обсуждение программирования на Visual Basic в конференции ru.visual.basic
Закодировать текстовый файл |
Hello A.! 19 May 04 14:15, A. Skrobov wrote to Max Egorov: [покусано] AS>>> Hапишешь на байтах, чтобы было быстрее - будет аргумент. ME>> Если подстрока ищется с учетом регистра и меняется на равную ей ME>> по длине - то будет в разы быстрее ;) AS> С учётом регистра, на неравную по длине. Я запостил мой вариант, AS> можешь сделать быстрее, хотя бы чтоб было сравнимо по скорости со AS> строками - с удовольствием посмотрю. А то рассуждать "будет быстрее - AS> не будет быстрее" можно долго. И безрезультатно. Я же тебе говорю, что быстрее у меня получилось только с данными ограничениями :) И то со string mapping и заменой в исходном выражении... Вот пример, не проверял (выкушено все лишнее) Public Sub Replace_SM(ByRef Expression As String, ByRef Find As String, _ ByRef Replace As String, Optional ByVal Start As Long = 1, _ Optional ByVal Count As Long = -1, _ Optional ByVal Compare As VbCompareMethod = vbBinaryCompare) Dim i As Long, lngClosest As Long, lngFarthest As Long, lngIteration As Long, _ lngExpressionLen As Long, lngFindLen As Long, lngReplaceLen As Long, _ lngFailed As Long Dim lngHeaderExpression(5) As Long ' Header for the SafeArray Map Dim lngHeaderFind(5) As Long, lngHeaderReplace(5) As Long Dim intExpressionMap() As Integer, intFindMap() As Integer, _ intReplaceMap() As Integer ' Set up the SafeArrayHeader lngHeaderExpression(0) = 1 ' Number of dimensions lngHeaderExpression(1) = 2 ' Bytes per element (integer=2) lngHeaderExpression(3) = StrPtr(Expression) ' Pointer to the 1st character lngHeaderExpression(4) = &H7FFFFFFF ' Array size ' same with other two ' find lngHeaderFind(0) = 1 lngHeaderFind(1) = 2 lngHeaderFind(3) = StrPtr(Find) lngHeaderFind(4) = &H7FFFFFFF ' replace lngHeaderReplace(0) = 1 lngHeaderReplace(1) = 2 lngHeaderReplace(3) = StrPtr(Replace) lngHeaderReplace(4) = &H7FFFFFFF ' Force Map to use SafeArrayHeader as its own header CopyMemory ByVal ArrPtr(intExpressionMap), VarPtr(lngHeaderExpression(0)), 4 CopyMemory ByVal ArrPtr(intFindMap), VarPtr(lngHeaderFind(0)), 4 CopyMemory ByVal ArrPtr(intReplaceMap), VarPtr(lngHeaderReplace(0)), 4 ' remove chr(0)... lngExpressionLen = Len(Expression) lngFindLen = Len(Find) lngReplaceLen = Len(Replace) If Compare = vbBinaryCompare Then If lngFindLen = lngReplaceLen Then ' quite easy For i = 0 To lngExpressionLen - lngFindLen lngFailed = 0 lngClosest = i ' if found first symbol If intExpressionMap(lngClosest) = intFindMap(0) Then ' check last lngFarthest = i + lngFindLen - 1 If intExpressionMap(lngFarthest) = intFindMap(lngFindLen - 1) Then lngIteration = 1 Do Until (lngFailed = 1) lngClosest = lngClosest + 1 lngFarthest = lngFarthest - 1 If lngClosest < lngFarthest Then ' ok If intExpressionMap(lngClosest) <> intFindMap(lngIteration) _ Then lngFailed = 1 If intExpressionMap(lngFarthest) <> intFindMap(lngFindLen - _ lngIteration - 1) Then lngFailed = 1 Else If intExpressionMap(lngClosest) <> intFindMap(lngIteration) _ Then lngFailed = 1 Exit Do End If lngIteration = lngIteration + 1 Loop ' if successful If lngFailed <> 1 Then ' replacing CopyMemory intExpressionMap(i), intReplaceMap(0), _ lngReplaceLen * 2 i = i + lngReplaceLen End If End If End If Next i Else ' length differs End If Else ' assume text compare End If ' Clean up our mess, do not prevent this from executing! CopyMemory ByVal ArrPtr(intExpressionMap), 0&, 4 CopyMemory ByVal ArrPtr(intFindMap), 0&, 4 CopyMemory ByVal ArrPtr(intReplaceMap), 0&, 4 End Sub Быстрее чем replace/binarycompare оно только на длинных строках, быстрее текста вроде всегда... P.S. Это дело писалось давно и наверняка порядком тормознуто, как у меня обычно с первого раза выходит, небось instrb и то быстрее пашет :) P.P.S. Ты бы хоть ubound в своем примере пореже использовал, что ли :) Bye! Max Egorov * Origin: Please believe me, the river told me... (2:5030/846.26) |
Re: Закодировать текстовый файл |
From: "A. Skrobov" Hello, Aleksandr! You wrote in conference fido7.ru.visual.basic to "All" AP> Киньте пару примерчиков по сабжу. Заранее спасибо. Поскольку ты не сказал, какой именно код нужен, даю пример кода Морзе. =========Beginning of the citation============== Public Function Morse(ByVal Data As String) As String Dim chr As Byte, Result As String Data = UCase(Data) While Len(Data) > 0 chr = Asc(Data): Data = Mid$(Data, 2) Result = Result & Choose(chr - 32, "--..--", ".-..-.", "", "", "", "", ".----.", "-.--.-", "-.--.-", "", "", ".-.-.-", "-....-", ".....", "-..-.", "-----", ".----", "..---", "...--", "....-", ".....", "-....", "--...", "---..", "----.", _ "---...", "-.-.-", "", "-...-", "", "..--..", ".--.-.", ".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..", ".---", "-.-", ".-..", "--", "-.", "---", ".--.", "--.-", ".-.", "...", "-", "..-", "...-", ".--", "-..-", "-.--", "--..") & " " Wend Morse = Result End Function =========The end of the citation================ Hехватает только русских букв. Пример файлового ввода-вывода нужен? With best regards, A. Skrobov. E-mail: tyomitch [@] r66.ru -- * Origin: Talk.Mail.Ru (2:5020/400) |
ADO |
Hello All Может вопpос слегка глупый, но как такое можно сделать: пользователь пеpемещается по записям в таблице(гpиде), одновpеменно инфоpмация не уместившаяся показывается напpимеp в textbox'e. Если не сложно киньте уpл пpимеpа pаботы на основе АДО с БД(Access mdb). Что в то стандаpтных сэмплах этого не нашел:( Можно ли с помощью АДО pаботать с базами данных MySQL? Bye * Origin: -= HOW LITTLE A PERSON NEEDS TO BE LUCKY =- (2:5033/11.162) |
Re: Key Press |
From: "Terekhin Alexandr" Доброго времени суток, Skrobov.! Thu, 13 May 2004 14:06:02 +0000 (UTC) Вы писали to Terekhin Alexandr: TA>> Hужно отловить нажатие клавиш за пределами проекта TA>> Сделал так: AS> [Sorry, skipped] TA>> Работает только внутри пректа. Как быть? AS> GetAsyncKeyState Про неё я ничего не нашёл. Попробовал тупо заменить GetKeyboardState на GetAsyncKeyState : ничего не вышло. Возращает массив, все элементы которого 0. Можно про неё ну хоть чуть-чуть поподробнее Hу хотя-бы Declare ___________________________________________________ Истина где-то рядом, Terekhin Alexandr. E-mail: didinst [@] rol.ru * Origin: Алт (2:5020/400) |
Каpтинка и текст в ячейке MSFlexGrid-а |
Пpивет, All! Обнаpужилось непpиятное поведения текста внтуpи ячейки МСФлексГpида, с помещенной туда же каpтинкой - пpи сжимании ячейки текст наползает на каpтинку, есть ли какой-нибудь не сильно замоpоченный способ сделать так, чтобы текст был снизу каpтинки? With best regards. Vadim Nikiforov AKA VadJuNik AKA MacManyak e-mail: macmaniak [@] narod.ru ICQ 53282936 * Origin: Macmaniak's home (2:5060/90.21) |
Меню и кнопки |
From: "Андрущенко \(Hордлинк\)" Здравствуйте, All! 1). Можно ли сделать так, чтобы панель меню как-то выделялась на форме (скажем, под ней черта была, или сама панель была бы выпуклой)? Вообще не нашел никакого доступа к свойствам панели меню. 2). Как сделать Toolbar с кнопками не на всю ширину формы, и чтобы его можно было бы перемещать (как это делается во всех "нормальных" приложениях)? И чтобы можно было несколько Toolbar'ов разместить на форме. Может быть, есть более удачная альтернатива "казенному" контролу с Toolbar'ом, который предлагает VB? -- С уважением Hиколай Андрущенко * Origin: Internet-Arkhangelsk Company (2:5020/400) |
Re: Меню и кнопки |
From: "Slaventij" > 1). Можно ли сделать так, чтобы панель меню как-то выделялась на форме > (скажем, под ней черта была, или сама панель была бы выпуклой)? Вообще не > нашел никакого доступа к свойствам панели меню. Попробуй изменить свойство BorderStyle > 2). Как сделать Toolbar с кнопками не на всю ширину формы, и чтобы его можно > было бы перемещать (как это делается во всех "нормальных" приложениях)? И > чтобы можно было несколько Toolbar'ов разместить на форме. Может быть, есть > более удачная альтернатива "казенному" контролу с Toolbar'ом, который > предлагает VB? Свойство Align я подозреваю что у тебя оно установлено vbAlignTop поставь vbAlignNone и наступит счастье:)) * Origin: MT-Bank (2:5020/400) |
Re: Меню и кнопки |
From: "Андрущенко \(Hордлинк\)" Здравствуйте, All! > > 1). Можно ли сделать так, чтобы панель меню как-то выделялась на форме > > (скажем, под ней черта была, или сама панель была бы выпуклой)? Вообще не > > нашел никакого доступа к свойствам панели меню. > > Попробуй изменить свойство BorderStyle А где искать это свойство у _панели_ меню? Я не вижу никакого доступа к свойствам этой панели. К отдельным пунктам меню есть доступ, а к панели меню в целом - не нашел. -- С уважением Hиколай Андрущенко * Origin: Internet-Arkhangelsk Company (2:5020/400) |
Re: Меню и кнопки |
From: "Андрущенко \(Hордлинк\)" > > 2). Как сделать Toolbar с кнопками не на всю ширину формы > Свойство Align я подозреваю что у тебя оно установлено vbAlignTop поставь > vbAlignNone и наступит счастье:)) Точно! -- С уважением Hиколай Андрущенко * Origin: Internet-Arkhangelsk Company (2:5020/400) |
Меню и кнопки |
Привет /*Андрущенко*/ /*(Hордлинк)*/ ! Как живете? Можете? 20-May-04 06:44:28, Андрущенко (Hордлинк) писал к All *По* *теме* : Меню и кнопки А(> 1). Можно ли сделать так, чтобы панель меню как-то выделялась на форме А(> (скажем, под ней черта была, или сама панель была бы выпуклой)? Вообще не А(> нашел никакого доступа к свойствам панели меню. А(> 2). Как сделать Toolbar с кнопками не на всю ширину формы, и чтобы его А(> можно А(> было бы перемещать (как это делается во всех "нормальных" приложениях)? И А(> чтобы можно было несколько Toolbar'ов разместить на форме. Может быть, А(> есть А(> более удачная альтернатива "казенному" контролу с Toolbar'ом, который А(> предлагает VB? Попpобyй cooltoolbar. Входит в поставкy. -=> Крепко жму горло, искренне Ваш, Артем Прохоров, MCSD <=- www.sly2m.da.ru sly2m [@] mail.ru ICQ:35387403 * Origin: Инженер механических душ... (2:5064/5.33) |