Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на Basic / VBA


Информационный Канал Subscribe.Ru

РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Basic/VBA

Выпуск № 57
от 19.05.2005, 23:00

Администратор:Калашников О.А.
В номере:Вопросов: 2, Ответов: 6


Вопрос № 20851: Добрый день. Как проверить существование файла на сетевом компьютере? Dir("\pavelsmeta ewsmeta.mdb") если файл не найден, выдает ошибку 52 - "Bad file name or number". Для локальных файлов все работает нормально....
Вопрос № 20860: Доброго времени суток! Помогите, пожалуйста, решить следующую задачу: Есть массив строк вида: 01100 10101 00110 Надо его отсортировать по возрастанию, чтобы получилось так: 00110 01100 10101 Подскажите, плз, ал...

Вопрос № 20851
Добрый день.
Как проверить существование файла на сетевом компьютере?
Dir("\pavelsmeta ewsmeta.mdb") если файл не найден, выдает ошибку 52 - "Bad file name or number". Для локальных файлов все работает нормально.
Отправлен: 14.05.2005, 12:32
Вопрос задал: Александр Шевченко (статус: 3-ий класс)
Всего ответов отправлено: 2

Отвечает: Puma
Здравствуйте, Александр Шевченко!
Пишем функцию с проверкой ошибок.
Function NetWorkFileExists(Path as string) as Boolean
On Error GoTo metka
If Dir$(ИмяФайла, attrib) <> "" Then _
NetWorkFileExists = True
Exit Function
metka:
If Err.Number=52 then NetWorkFileExists = False
End Function
Ответ отправил: Puma (статус: Практикант)
Отправлен: 14.05.2005, 13:45
Оценка за ответ: 5
Комментарий оценки:
А через API как?

Отвечает: ale2k
Здравствуйте, Александр Шевченко!
сделай обработку ошибки. В начале процидуры или функции впиши
on error resume next или on error goto...(строка обработки)
далее операция с файлом и
if err then ...
err возвращает код ошибки, это тоже можно использовать.
Ответ отправил: ale2k (статус: 7-ой класс)
Отправлен: 14.05.2005, 15:04
Оценка за ответ: 4


Вопрос № 20860
Доброго времени суток!
Помогите, пожалуйста, решить следующую задачу:
Есть массив строк вида:
01100
10101
00110
Надо его отсортировать по возрастанию, чтобы получилось так:
00110
01100
10101
Подскажите, плз, алгоритм, или киньте кусок кода. Спасибо заранее.
Отправлен: 14.05.2005, 14:27
Вопрос задал: Yaroslave (статус: Посетитель)
Всего ответов отправлено: 4

Отвечает: Licvidator
Здравствуйте, Yaroslave!
Я предлагаю очень просто решить задачу - загнать нужные числа в ListBox, предварительно выставив его свойство Sorted как True;)
Иначе же придется делать цикл, например такой:
1. Берем первое число и начинаем последовательно сравнивать с каждым последующим, если последующее меньше - запоминаем меньшее и продолжаем цикл дальше. По завершении цикла наименьшее запоминаем в какой-нить отдельной переменной, а из первого массива его удаляем.
2. Далее сравнение повторяется опять с первого числа до нахождения второго минимального числа из оставшихся чисел и т.д.
Ответ отправил: Licvidator (статус: Профессор)
Отправлен: 14.05.2005, 14:45
Оценка за ответ: 5
Комментарий оценки:
Действительно, самый простой способ :), только при наличии 15000 и более строк работает немного медленно...
С циклом уж больно не хотелось возиться

Отвечает: Александр Шевченко
Здравствуйте, Yaroslave!
Используем "метод пузырьков":
Имеем массив a(), одномерный, строковый. Пишем код из приложения. Для чисел то же самое, только надо изменить тип переменной t.

Приложение:

Ответ отправил: Александр Шевченко (статус: 3-ий класс)
Отправлен: 14.05.2005, 15:41

Отвечает: Ерёмин Андрей Андреевич
Здравствуйте!
Думаю, проще всего преобразовать каждый элемент массива в десятичную систему, отсортировать полученный массив, а затем всё перевести обратно.
Ответ отправил: Ерёмин Андрей Андреевич (статус: 2-ой класс)
Отправлен: 14.05.2005, 16:58

Отвечает: Puma
Здравствуйте, Yaroslave!
Есть еще один алгоритм сортировки - "Быстрая сортировка (QuickSort)".
Sub QuickSortString(strArray() As String, _
Optional intLeft As Integer = Missing, _
Optional intRight As Integer = Missing)
' Entry point for sorting the array.

' This technique uses the recursive Quicksort
' algorithm to perform its sort.

Dim i As Integer
Dim J As Integer
Dim strTestVal As Variant
Dim intMid As Integer
If intLeft = Missing Then intLeft = LBound(strArray())
If intRight = Missing Then intRight = UBound(strArray())

If intLeft < intRight Then
intMid = (intLeft + intRight) 2
strTestVal = strArray(intMid)
i = intLeft
J = intRight
Do
Do While strArray(i) < strTestVal
i = i + 1
Loop
Do While strArray(J) > strTestVal
J = J - 1
Loop
If i <= J Then
SwapElementsString strArray(), i, J
i = i + 1
J = J - 1
End If
Loop Until i > J
' To optimize the sort, always sort the
' smallest segment first.
If J <= intMid Then
Call QuickSortString(strArray(), intLeft, J)
Call QuickSortString(strArray(), i, intRight)
Else
Call QuickSortString(strArray(), i, intRight)
Call QuickSortString(strArray(), intLeft, J)
End If
End If
End Sub
Private Sub SwapElementsString(strItems() As String, intItem1 As Integer, intItem2 As Integer)
Dim strTemp As String
strTemp = strItems(intItem2)
strItems(intItem2) = strItems(intItem1)
strItems(intItem1) = strTemp
End Sub
Функция поболее, чем предыдущее, но производительность отличается в разы, в пользу последней.
Ответ отправил: Puma (статус: Практикант)
Отправлен: 14.05.2005, 21:50


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2005, RusFAQ.ru, Россия, Москва. Все права защищены.
Идея, дизайн, программирование, авторское право: Калашников О.А.

Яндекс


http://subscribe.ru/
http://subscribe.ru/feedback/
Подписан адрес:
Код этой рассылки: comp.soft.prog.basicvba
Отписаться

В избранное