Массив Массивов

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
GM
programador
programador
 
Сообщения: 1427
Зарегистрирован: 24.06.2003 (Вт) 15:56
Откуда: 194.67.52.100

Сообщение GM » 27.03.2005 (Вс) 4:32

Как понял:
Код: Выделить всё
type SubArray
arr() as byte
end type
dim m() as Subarray

А вообще-то массив массивов, это двухмерный массив.
الفيجوال بيسك الرابح

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 27.03.2005 (Вс) 15:04

А FE то зачем 2 раз аобъявлять?

Faust
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 649
Зарегистрирован: 29.12.2003 (Пн) 13:38
Откуда: лаборатория

Сообщение Faust » 28.03.2005 (Пн) 7:09

А в чём, собственно, проблемы? Заголовок массива.
Листинги не горят!

Inferno
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 179
Зарегистрирован: 26.01.2005 (Ср) 1:06

Сообщение Inferno » 29.03.2005 (Вт) 18:02

А смысл заводить двумерный массив если ширина постоянна?

Inferno
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 179
Зарегистрирован: 26.01.2005 (Ср) 1:06

Сообщение Inferno » 29.03.2005 (Вт) 18:37

Грубо говоря файл это тоже одномерный массив. Если тебе нужны какие-то его фрагменты, скажем байты с 199 по 299 то считать их можно через API функции

Код: Выделить всё

Const MOVEFILE_REPLACE_EXISTING = &H1
Const FILE_ATTRIBUTE_TEMPORARY = &H100
Const FILE_BEGIN = 0
Const FILE_SHARE_READ = &H1
Const FILE_SHARE_WRITE = &H2
Const CREATE_NEW = 1
Const CREATE_ALWAYS = 2
Const OPEN_EXISTING = 3
Const GENERIC_READ = &H80000000
Const GENERIC_WRITE = &H40000000

Private Declare Function WriteFile Lib "kernel32" (ByVal hFile As Long, lpBuffer As Any, ByVal nNumberOfBytesToWrite As Long, lpNumberOfBytesWritten As Long, ByVal lpOverlapped As Any) As Long
Private Declare Function ReadFile Lib "kernel32" (ByVal hFile As Long, lpBuffer As Any, ByVal nNumberOfBytesToRead As Long, lpNumberOfBytesRead As Long, ByVal lpOverlapped As Any) As Long
Private Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, ByVal lpSecurityAttributes As Any, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Declare Function SetFilePointer Lib "kernel32" (ByVal hFile As Long, ByVal lDistanceToMove As Long, lpDistanceToMoveHigh As Long, ByVal dwMoveMethod As Long) As Long
Private Declare Function GetFileSize Lib "kernel32" (ByVal hFile As Long, lpFileSizeHigh As Long) As Long
Private Declare Function GetLastError Lib "kernel32" () As Long
Private Declare Function SetEndOfFile Lib "kernel32" (ByVal hFile As Long) As Long


Код: Выделить всё

Dim Fhandle as long
dim ReadBytesCount as long
Dim ByteArr(100) as byte
Fhandle = CreateFile(FileName, GENERIC_READ Or GENERIC_WRITE, FILE_SHARE_READ Or FILE_SHARE_WRITE, ByVal 0&, OPEN_EXISTING, 0, 0)
SetFilePointer Fhandle , 199, 0, FILE_BEGIN
ReadFile Fhandle , ByteArr(0), 100, ReadBytesCount, ByVal 0&
CloseHandle (Fhandle)


ReadBytesCount- возвращает количество считаных байт

после этой операции массив ByteArr будет содержать 100 байт с 199 позиции в файле по 299

И работает быстрее и память всякой ерундой не забивается

Тут функции не используются, но я на всякий случай оставил.
GetLastError - возвращает номер последней ошибки
SetEndOfFile - устанавливает конец файла. Можно укорачивать и удлинять файлы. При удлинении новая область может быть забита всяким хламом. Лучше перезаписать.
GetFileSize - возвращает размер файла
SetFilePointer - Устанавливает внутренний указатель в файле
WriteFile - записывает данные в файл
Функция CreateFile возвращает указатель на поток и -1 в случае ошибки.

Зная ширину, совсем не трудно высчитать начальную позицию считываемой области.


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

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

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

    TopList