Передача оператору Put массива

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Source
Постоялец
Постоялец
 
Сообщения: 351
Зарегистрирован: 04.09.2007 (Вт) 11:21

Передача оператору Put массива

Сообщение Source » 26.10.2007 (Пт) 16:12

Я делаю функцию записи в файл с обработкой ошибки и мне надо передать ей операнд данных для записи. В основном требуется 1 элемент массива User Type. Можно сделать более универсально, захватив другие типы. Как это будет выглядеть? Также интересно, как получить по hFile полный путь к файлу, чтобы не тягать пути к открытым файлам в программе? Вот что я пока написал:
Код: Выделить всё
Public Sub MyWriteFile(ByVal hFile As Integer, Optional NumRec As Long = -1)
Dim Res As Long, NameFile As String, Drive As String
    On Error GoTo errWrite
fWrite:
    If NumRec > 0 Then
     put hFile, numrec,
    Else
     put hFile, ,
    End If
   
    Exit Sub
   
errWrite:
    Drive = Mid(NameFile, 1, 2)
    Res = MsgBox("Ошибка записи в файл " & NameFile & "! Возможно, на диске '" & Drive & "' нет свободного места. Освободите место и нажмите 'OK' для повторной записи или нажмите 'Отмена' для продолжения работы без записи данных (данные будут утеряны!)", vbExclamation + vbOKCancel, NamePrg)
    If Res = vbOK Then Resume fWrite Else Exit Sub
End Sub

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 26.10.2007 (Пт) 21:42

Source
There are no oparator 'Get' in the Visual Basic.

И он бы там был если бы запись вида
a = b Get c
a = Get c
a = b Get

была нормальной, но её там нет.

Можно сделать более универсально, захватив другие типы. Как это будет выглядеть?

(Тут я попробовал понять код, но не понял его)

Также интересно, как получить по hFile полный путь к файлу, чтобы не тягать пути к открытым файлам в программе?

Ну так не тягай. hFile для того и придуман. Кстати h в неём - одно название.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

SSecurity
Служба безопасности
Аватара пользователя
 
Сообщения: 1283
Зарегистрирован: 19.08.2003 (Вт) 1:11
Откуда: Россия, Мурманск

Re: Передача оператору Put массива

Сообщение SSecurity » 26.10.2007 (Пт) 22:32

Source писал(а):В основном требуется 1 элемент массива User Type. Можно сделать более универсально, захватив другие типы. Как это будет выглядеть?

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

Например у тебя тип
Код: Выделить всё

Type myType
  Name as string
  Value as Long
End Type

Ты передаешь его в свою функцию обработки:
Код: Выделить всё

Sub WriteToFile(ByVal hFile as Integer, byVal RecPos as long, ByVal DATA as myType)
  On Error resume next
  PUT #hFile, RecPos, DATA.Name & DATA.Value
  '## в файл пишем все в Variant
End Sub


вроде так - не проверял.
Программист - это маленький Бог, а все его ошибки - это самостоятельные творения:)
Так задумано:)

SSecurity
Служба безопасности
Аватара пользователя
 
Сообщения: 1283
Зарегистрирован: 19.08.2003 (Вт) 1:11
Откуда: Россия, Мурманск

Сообщение SSecurity » 26.10.2007 (Пт) 22:38

а для универсальности - передавай DATA в Variant ... предварительно разбамбливай любые типы до варианта :)

По крайней мере функции для перебора свойств юзерских типов данных я не встречал, если она есть буду рад узнать ....
так вот если есть - то тогда с ЕЁ помощью перебираешь свойства ... потом все сводишь к варианту или стрингу и все - будет тогда тебе униерсал:)

с Уважением,
Сергей
Программист - это маленький Бог, а все его ошибки - это самостоятельные творения:)
Так задумано:)

Source
Постоялец
Постоялец
 
Сообщения: 351
Зарегистрирован: 04.09.2007 (Вт) 11:21

Сообщение Source » 26.10.2007 (Пт) 22:44

Хакер:
1. не понял, что за Get?

2. если написать

Public a(1) As struMy
Public Type struMy
a1 As Byte
a2 As Long
End Type


Public Sub MyWriteFile(ByVal hFile As Integer, Dat as Variant, Optional NumRec As Long = -1)
...

то
MyWriteFile hFile, a(1), 2
вызовет ошибку
Compile error:
Only user-defined types defined in public object modules can be coerced to or from a variant or passed to late-bound functions

так как писать Dat as ?

3. Есть ф-я, которая вернёт полный путь к файлу по hFile вроде
NameFile=GetFilePath(hFile)?

SSecurity
Служба безопасности
Аватара пользователя
 
Сообщения: 1283
Зарегистрирован: 19.08.2003 (Вт) 1:11
Откуда: Россия, Мурманск

Сообщение SSecurity » 26.10.2007 (Пт) 23:04

Source
Тебе написали,
Уважаемый, Source, пожалуйста, не поленись добавить модуль к проекту и в нем описать ПУБЛИЧНЫЙ тип данных ... только его можно передать в качестве параметра к функции (от автора: или функцию сделай Private)

С Уважением,
Сергей
Программист - это маленький Бог, а все его ошибки - это самостоятельные творения:)
Так задумано:)

Source
Постоялец
Постоялец
 
Сообщения: 351
Зарегистрирован: 04.09.2007 (Вт) 11:21

Сообщение Source » 26.10.2007 (Пт) 23:07

так всё и так публично описано в модуле :)

SSecurity
Служба безопасности
Аватара пользователя
 
Сообщения: 1283
Зарегистрирован: 19.08.2003 (Вт) 1:11
Откуда: Россия, Мурманск

Сообщение SSecurity » 26.10.2007 (Пт) 23:14

И модуль должен быть объектом :))) ...

извиняюсь .... не в простом модуле:))
т.е. ФОРМА, DLL и т.д.

:)
Программист - это маленький Бог, а все его ошибки - это самостоятельные творения:)
Так задумано:)

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 26.10.2007 (Пт) 23:28

не понял, что за Get?

Ну, Put.

There are no operator 'Put' in the Visual Basic.
И далее по аналогии.

И модуль должен быть объектом )) ...

Модуль должен быть классом.

Перевод неправильный. Вот правильный перевод:

Only user-defined types defined in public object modules can be coerced to or from a variant or passed to late-bound functions

Только user-defined типы, определённые в Public объектных модулях могут быть преобразованы в/из Variant или передаваться в функции, использующие позднее связывание.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Source
Постоялец
Постоялец
 
Сообщения: 351
Зарегистрирован: 04.09.2007 (Вт) 11:21

Сообщение Source » 27.10.2007 (Сб) 11:53

смотрел коды ошибок:
61 Disk ftill Переполнение диска
3026 Not enough space on disk Недостаточно места на диске
У меня в тесте возникает ошибка 61. Когда возникает 3026?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 27.10.2007 (Сб) 12:04

ftill

Каюхстан? :)
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Source
Постоялец
Постоялец
 
Сообщения: 351
Зарегистрирован: 04.09.2007 (Вт) 11:21

Сообщение Source » 27.10.2007 (Сб) 12:11

Яблокитай :) Ну выдаёт full, но на неком сайте описания ошибок ftill.
Когда возникает 3026?

Source
Постоялец
Постоялец
 
Сообщения: 351
Зарегистрирован: 04.09.2007 (Вт) 11:21

Сообщение Source » 27.10.2007 (Сб) 12:14

видать распознавалка вместо "u" распознала "ti" :)

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 27.10.2007 (Сб) 12:21

Source
Да-да, у нас такое тоже было - Казахстан всегда распознавался как Кюахстан или Каюхстан.

А также:
http://share.fire-lines.ru/hacker/kuahstan_resave.png
http://share.fire-lines.ru/hacker/gashish.png
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 64

    TopList  
cron