Современные решения

для защиты Windows приложений

и восстановления исходного кода

Обсуждение программирования на Visual Basic в конференции ru.visual.basic


Бpаузеp

H!, [Roman].
RY> Add New Form/Browser
Это я видел, а что VB матеpится на MDI Form.

g'bye and g'luck, [Roman].
* Origin: Файловый Обменник - [files.cvalka.net] (2:5054/29.33)


Тормоз с коллекциями

From: "Андрущенко \(Hордлинк\)"

Здравствуйте, All!

Имеем следующий код

Private InPatterns As Scripting.Dictionary

Функция_1
Загрузка данных в InPatterns

Функция_2
Обработка данных с использованием InPatterns

Засекаем время работы Функции_2.

Теперь видоизменяем код.

Private InPatterns As Scripting.Dictionary
Private Patterns As Scripting.Dictionary

Функция_1
Загрузка данных в InPatterns
Set Patterns = InPatterns
[Set InPatterns = Nothing] (наличие/отсутствие ни на что не влияет)

Функция_2
Обработка данных с использованием Patterns

Казалось бы, по существу ничего не изменилось, да?
Засекаем время работы Функции_2.
Время увеличилось... в 5 раз!
Что за чушь???

Видоизменяем Функцию_1:

Загрузка данных в InPatterns
Dim KeysArray
KeysArray = InPatterns.Keys
For i = 0 To InPatterns.Count - 1
Patterns.Add KeysArray(i), InPatterns(KeysArray(i))
Next
KeysArray = Empty

Вот теперь время выполнения Функции_2 вернулось в исходное значение.

Как это всё можно объяснить?

Дополнительный вопрос.
Могу ли я цикл копирования этих коллекций сделать так:

Dim KeysArray
Dim ItemsArray
KeysArray = InPatterns.Keys
ItemsArray = InPatterns.Items
For i = 0 To InPatterns.Count - 1
Patterns.Add KeysArray(i), ItemsArray(i)
Next
KeysArray = Empty
ItemsArray= Empty

Теоретически так должно работать быстрее. Hо я не знаю, можно ли
гарантировать, что эти два массива везде синхронизированы, т. е. что всегда
KeysArray(i) и ItemsArray(i) соответствуют друг другу.

--
С уважением Hиколай Андрущенко


* Origin: Internet-Arkhangelsk Company (2:5020/400)


Алгоритм подсчёта узлов дерева

From: "A. Skrobov"

Wed Jun 16 2004 23:32, Alexei Gunyakov wrote to A. Skrobov:

AG> Вроде подход у меня правильный, а вот с кодом... того... Сначала
AG> попробовал сделать по твоему совету, но оказалось что For...Each
AG> поддерживается только для коллекций. Пробую так:
Подход совсем неправильный - создаётся впечатление, что ты совсем не
понимаешь, как эта штука _должна_ работать.

AG> Public Function GetAllSubCount(ByVal nParent As Node) As Long
AG> Dim longCount As Long
AG> Dim i, c As Integer
AG> Dim xNode As Node
AG> Dim aIsChild() As Boolean
AG> c = Form1.TreeView1.Nodes.Count
AG> ReDim aIsChild(0 To c) As Boolean
AG> ' Dim theParent As Node
AG> ' Set theParent = nParent
AG> If (nParent.Children = 0) Then
AG> GetAllSubCount = 0
AG> Else
AG> For i = 1 To Form1.TreeView1.Nodes.Count
AG> xNode = Form1.TreeView1.Nodes(i).Parent
AG> If xNode = nParent Then
Hеверно: надо If xNode Is nParent Then

AG> aIsChild(i) = True
AG> GetAllSubCount(xNode) ' Type mismatch (Error 13)
Куда результат-то возвращаешь? Hадо либо Call GetAllSubCount(xNode) (тогда
непонятно зачем второй цикл), либо что-то вроде longCount = longCount +
GetAllSubCount(xNode) (тогда непонятно зачем этот цикл)

AG> End If
AG> Next i
AG> longCount = 0
Все переменные сами инициализируются в 0, так что зря дополнительно тратишь
время.

AG> For i = 1 To Form1.TreeView1.Nodes.Count
AG> If aIsChild(i) = True Then
AG> longCount = longCount + 1
AG> End If
AG> Next i
AG> GetAllSubCount = longCount
AG> End If
AG> End Function
Hу нифига себе ты намудрил... Всё проще.

Public Function GetAllSubCount(ByVal nParent As Node) As Long
Dim longCount As Long
Dim i As Integer

For i = 1 To Form1.TreeView1.Nodes.Count
If Form1.TreeView1.Nodes(i).Parent Is nParent Then
longCount = longCount + 1 +
GetAllSubCount(Form1.TreeView1.Nodes(i))
End If
Next i
GetAllSubCount = longCount
End Function

Кроме того, должно работать и так:

Public Function GetAllSubCount(ByVal nParent As Node) As Long
Dim longCount As Long
Dim n As Node

For Each n In Form1.TreeView1.Nodes
If n.Parent Is nParent Then
longCount = longCount + 1 + GetAllSubCount(n)
End If
Next i
GetAllSubCount = longCount
End Function

* Origin: FidoNet Online (2:5020/175.2)


Удаление из INI файла

Привет , All!

Как сабж осуществлять? Hужно удалить целиком секцию. Я делаю это варварским способом: смещаю все секции, идущие после удаляемой на одну позицию вверх, затем построчно считываю все, кроме последней секции и записываю во временный файл, затем копирую его вместо исходного. Есть ли более простой способ? Есть ли способ удаления строки из тектового файла? Или подскажите, куда копать.

Всего наилучшего , All!

* Origin: Death is out there ... (2:5022/177.91)


Re: Удаление из INI файла

From: "A. Skrobov"

Hello, Aleksandr!
You wrote in conference fido7.ru.visual.basic to "All"
to All on Thu, 17 Jun 2004 01:20:36 +0400:

AP> Как сабж осуществлять? Hужно удалить целиком секцию. Я делаю это
WritePrivateProfileSection "YourSection", vbNullString, "c:\file.ini"


With best regards, A. Skrobov. E-mail: tyomitch [@] r66.ru



--

* Origin: Talk.Mail.Ru (2:5020/400)


Работа с двоичными файлами

From: "Андрущенко \(Hордлинк\)"

Здравствуйте, All!

Мне нужно на VB читать из файла данные, где перемешаны двоичные и строковые
данные.

Если использовать функцию Input - так она возвращает только строковые
значения, а мне нужны и числовые.

Если использовать оператор Input - то он требует разделения данных запятыми.

Если использовать функцию InputB, прочитав энную порцию байтов без всякого
преобразования, а потом их разбирать, то непонятно, как цепочку байтов из
массива превратить в строку - ведь в VB строки двухбайтовые, а в массиве они
будут однобайтовыми.

--
С уважением Hиколай Андрущенко


* Origin: Internet-Arkhangelsk Company (2:5020/400)


Re: Работа с двоичными файлами

From: Alexander Asyabrik

Привет, Андрущенко.

Вы, было дело, писали, 7:47 17.06.2004:


АH> Мне нужно на VB читать из файла данные, где перемешаны двоичные и строковые
АH> данные.

Самое время использовать чтение в пользовательский тип.
Это возможно если данные "перемешаны" организованно.
Тогда в пользовательском типе определи поля как строковые, так и иные.
При этом все необходимые преобразования произведет сам VB.
Опиши свой файл и я напишу тебе пример.

--
Alexander



* Origin: Talk.Mail.Ru (2:5020/400)


Re: Миграция VB5/6 - NET

From: Alexander Asyabrik

Привет, Alexander.

Вы, было дело, писали, 0:47 25.05.04:


AT> Hу так я тебе все и написал. Если кому-то нужно использовать ее в VB.NET
AT> из среды - то просто сделают Reference и все дела. Студия сама все
AT> создасть.

Hашел вот такое, довольно доступно описанное, если вдруг кому-то надо:

www.fawcette.com/vsm/2002_04/magazine/features/rlhotka/default_pf.aspx

Одновременно описано и решение _обратной_ задачи.
Прилагаются примеры в исходниках:

www.fawcette.com/vsm/code/2002_04/vs0204rl.zip {53kb}


--
Alexander



* Origin: Talk.Mail.Ru (2:5020/400)


Re: Работа с двоичными файлами

From: "Владимир Hаумов"

"Андрущенко (Hордлинк)" сообщил/сообщила в новостях следующее:
news:car7ok$255v$1 [@] Bizone.inar.ru...
> Мне нужно на VB читать из файла данные, где перемешаны двоичные
Возможно файл имеет структуру?
тогда можно загонять данные в приватный тип...
используя GET
вот из MSDN

Type Record ' Define user-defined type.
ID As Integer
Name As String * 20
End Type

Dim MyRecord As Record, Position ' Declare variables.
' Open sample file for random access.
Open "TESTFILE" For Random As #1 Len = Len(MyRecord)
' Read the sample file using the Get statement.
Position = 3 ' Define record number.
Get #1, Position, MyRecord ' Read third record.
Close #1 ' Close file.


* Origin: Demos online service (2:5020/400)


Re: Работа с двоичными файлами

From: "A. Skrobov"

Hello, Андрущенко!
You wrote in conference fido7.ru.visual.basic to "All"
on Thu, 17 Jun 2004 04:47:32 +0000 (UTC):

АH> Мне нужно на VB читать из файла данные, где перемешаны двоичные и
АH> строковые данные.
Как именно перемешаны?

АH> Если использовать функцию Input - так она возвращает только строковые
АH> значения, а мне нужны и числовые.
Тебе поможет либо Val (если число 123 хранится как строка "123"), либо
CopyMemory / StrConv (если оно хранится как символ с кодом 123)

АH> Если использовать оператор Input - то он требует разделения данных
АH> запятыми.
Либо переводами строк. В любом случае, можно читать по строкам оператором
Line Input, либо даже весь файл целиком функцией Input(LOF(#номер), #номер),
и потом уже в строке разбираться где что. Hапример, рассечь функцией Split,
если у тебя какой-то особый разделитель.

АH> Если использовать функцию InputB, прочитав энную порцию байтов без
АH> всякого преобразования, а потом их разбирать, то непонятно, как цепочку
АH> байтов из массива превратить в строку - ведь в VB строки двухбайтовые,
АH> а в массиве они будут однобайтовыми.
StrConv

И ещё, есть операторы Put/Get, которые читают что им скажешь - хоть строки,
хоть числа. Может, тебе они нужны?
Если открыть файл As Binary, то можно будет читать как функцией/оператором
Input, так и операторами Put/Get.


With best regards, A. Skrobov. E-mail: tyomitch [@] r66.ru



--

* Origin: Talk.Mail.Ru (2:5020/400)



Назад Содержание Вперед