Visual Basic 6.0 - Закодировать текстовый файл
Закодировать текстовый файл
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" <tyomitch [@] r66.ru>
Hello, Aleksandr!
You wrote in conference fido7.ru.visual.basic to "All"
<fido7.ru.visual.basic [@] talk.ru>to All on Thu, 13 May 2004 19:58:00 +0400:
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" <didinst [@] rol.ru>
Доброго времени суток, 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ордлинк\)" <naa [@] arh.ru>
Здравствуйте, All!
1). Можно ли сделать так, чтобы панель меню как-то выделялась на форме
(скажем, под ней черта была, или сама панель была бы выпуклой)? Вообще не
нашел никакого доступа к свойствам панели меню.
2). Как сделать Toolbar с кнопками не на всю ширину формы, и чтобы его можно
было бы перемещать (как это делается во всех "нормальных" приложениях)? И
чтобы можно было несколько Toolbar'ов разместить на форме. Может быть, есть
более удачная альтернатива "казенному" контролу с Toolbar'ом, который
предлагает VB?
--
С уважением Hиколай Андрущенко
* Origin: Internet-Arkhangelsk Company (2:5020/400)
Re: Меню и кнопки
From: "Slaventij" <v.Davydenko [@] mt-bank.com>
> 1). Можно ли сделать так, чтобы панель меню как-то выделялась на форме
> (скажем, под ней черта была, или сама панель была бы выпуклой)? Вообще не
> нашел никакого доступа к свойствам панели меню.
Попробуй изменить свойство BorderStyle
> 2). Как сделать Toolbar с кнопками не на всю ширину формы, и чтобы его
можно
> было бы перемещать (как это делается во всех "нормальных" приложениях)? И
> чтобы можно было несколько Toolbar'ов разместить на форме. Может быть,
есть
> более удачная альтернатива "казенному" контролу с Toolbar'ом, который
> предлагает VB?
Свойство Align я подозреваю что у тебя оно установлено vbAlignTop поставь
vbAlignNone и наступит счастье:))
* Origin: MT-Bank (2:5020/400)
Re: Меню и кнопки
From: "Андрущенко \(Hордлинк\)" <naa [@] arh.ru>
Здравствуйте, All!
> > 1). Можно ли сделать так, чтобы панель меню как-то выделялась на форме
> > (скажем, под ней черта была, или сама панель была бы выпуклой)? Вообще
не
> > нашел никакого доступа к свойствам панели меню.
>
> Попробуй изменить свойство BorderStyle
А где искать это свойство у _панели_ меню? Я не вижу никакого доступа к
свойствам этой панели. К отдельным пунктам меню есть доступ, а к панели
меню в целом - не нашел.
--
С уважением Hиколай Андрущенко
* Origin: Internet-Arkhangelsk Company (2:5020/400)
Re: Меню и кнопки
From: "Андрущенко \(Hордлинк\)" <naa [@] arh.ru>
> > 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)