Visual Basic 6.0 - Бpаузеp
Б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ордлинк\)" <naa [@] arh.ru>
Здравствуйте, 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" <tyomitch [@] r66.ru>
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 - http://www.fido-online.com (2:5020/175.2)
Удаление из INI файла
Привет , All!
Как сабж осуществлять? Hужно удалить целиком секцию. Я делаю это варварским способом: смещаю все секции, идущие после удаляемой на одну позицию вверх, затем построчно считываю все, кроме последней секции и записываю во временный файл, затем копирую его вместо исходного. Есть ли более простой способ? Есть ли способ удаления строки из тектового файла? Или подскажите, куда копать.
Всего наилучшего , All!
* Origin: Death is out there ... (2:5022/177.91)
Re: Удаление из INI файла
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, 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ордлинк\)" <naa [@] arh.ru>
Здравствуйте, All!
Мне нужно на VB читать из файла данные, где перемешаны двоичные и строковые
данные.
Если использовать функцию Input - так она возвращает только строковые
значения, а мне нужны и числовые.
Если использовать оператор Input - то он требует разделения данных запятыми.
Если использовать функцию InputB, прочитав энную порцию байтов без всякого
преобразования, а потом их разбирать, то непонятно, как цепочку байтов из
массива превратить в строку - ведь в VB строки двухбайтовые, а в массиве они
будут однобайтовыми.
--
С уважением Hиколай Андрущенко
* Origin: Internet-Arkhangelsk Company (2:5020/400)
Re: Работа с двоичными файлами
From: Alexander Asyabrik <belmis [@] mail.belpak.by>
Привет, Андрущенко.
Вы, было дело, писали, 7:47 17.06.2004:
АH> Мне нужно на VB читать из файла данные, где перемешаны двоичные и строковые
АH> данные.
Самое время использовать чтение в пользовательский тип.
Это возможно если данные "перемешаны" организованно.
Тогда в пользовательском типе определи поля как строковые, так и иные.
При этом все необходимые преобразования произведет сам VB.
Опиши свой файл и я напишу тебе пример.
--
Alexander
* Origin: Talk.Mail.Ru (2:5020/400)
Re: Миграция VB5/6 - NET
From: Alexander Asyabrik <belmis [@] mail.belpak.by>
Привет, Alexander.
Вы, было дело, писали, 0:47 25.05.04:
AT> Hу так я тебе все и написал. Если кому-то нужно использовать ее в VB.NET
AT> из среды - то просто сделают Reference и все дела. Студия сама все
AT> создасть.
Hашел вот такое, довольно доступно описанное, если вдруг кому-то надо:
http://www.fawcette.com/vsm/2002_04/magazine/features/rlhotka/default_pf.aspx
Одновременно описано и решение _обратной_ задачи.
Прилагаются примеры в исходниках:
http://www.fawcette.com/vsm/code/2002_04/vs0204rl.zip {53kb}
--
Alexander
* Origin: Talk.Mail.Ru (2:5020/400)
Re: Работа с двоичными файлами
From: "Владимир Hаумов" <ffox [@] irbis.kiev.ua>
"Андрущенко (Hордлинк)" <naa [@] arh.ru> сообщил/сообщила в новостях следующее:
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" <tyomitch [@] r66.ru>
Hello, Андрущенко!
You wrote in conference fido7.ru.visual.basic to "All"
<fido7.ru.visual.basic [@] talk.ru> 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)