Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Работа с динамическим массивом Добавлено: 27.11.05 00:35  

Автор вопроса:  Alex | Web-сайт: metalosplav.ru
Вот такое вот задание. Есть динамический массив типа Byte в него загружена информация свыше 32Mb необходимо вывести все эти байты на экран.
Dim sData() As Byte
Private Sub Obr()
 Dim iSize As Long
  iSize=FileLen("C:\FileName.bin")
   ReDim sData(iSize)
 Open "C:\FileName.bin" For Binary Access Read As #1
   Get #1,,sData
 Close #1
End Sub
Если использовать какие либо циклы то это надо обрабатывать каждое значение в массиве так и к концу света не закончишь. Посоветуйте.

Ответить

  Ответы Всего ответов: 13  

Номер ответа: 1
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #1 Добавлено: 27.11.05 06:52
а зачем именно в массве? И строку вывести можно...

Ответить

Номер ответа: 2
Автор ответа:
 HOOLIGAN



Вопросов: 0
Ответов: 1066
 Профиль | | #2 Добавлено: 27.11.05 15:11
Посоветуйте.

Советую: не преобразовывай весь массив сразу. Только то, что поместится на экран. Когда надо вывести следующий кусок информации - преобразуешь его.

А пока юзер изучает выведенный на экран кусок, можешь потихоньку незаметно преобразовывать остальные куски массива.

Ответить

Номер ответа: 3
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #3 Добавлено: 28.11.05 00:02
вообще массив ненужен здесь! Зачем для вывода на экран в массив? Темболее если файл большой, то объявлять массив равным размеру файла бред... оперативка не резиновая же.. :)

Ответить

Номер ответа: 4
Автор ответа:
 Alex



Вопросов: 13
Ответов: 26
 Web-сайт: metalosplav.ru
 Профиль | | #4
Добавлено: 28.11.05 00:52
а зачем именно в массве? И строку вывести можно...

Это задание у меня такое препод у меня немного того :)
Советую: не преобразовывай весь массив сразу. Только то, что поместится на экран. Когда надо вывести следующий кусок информации - преобразуешь его.

А если требуется сразу перейти на середину или на конец. Чито тогда делать.
вообще массив ненужен здесь! Зачем для вывода на экран в массив? Темболее если файл большой, то объявлять массив равным размеру файла бред... оперативка не резиновая же.. :)

Файл имеет размер от 14mb до 62mb.

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

примерно вот так:
255 15 44 58 69 245 200 128 и т.д.

Ответить

Номер ответа: 5
Автор ответа:
 HOOLIGAN



Вопросов: 0
Ответов: 1066
 Профиль | | #5 Добавлено: 28.11.05 01:06
HACKER, в массиве могут быть непечатные символы, типа 0. В какой строке ты их собрался выводить?


Чито тогда делать
Переходить к середине, брать байты из середины в количестве, достаточном для заполнения экрана, преобразовывать в строки вида "255 15 44 58 69 245 200 128" и показывать их.

Ответить

Номер ответа: 6
Автор ответа:
 Alex



Вопросов: 13
Ответов: 26
 Web-сайт: metalosplav.ru
 Профиль | | #6
Добавлено: 28.11.05 01:55
Чито тогда делать
Переходить к середине, брать байты из середины в количестве, достаточном для заполнения экрана, преобразовывать в строки вида "255 15 44 58 69 245 200 128" и показывать их.

И в чем их выводить?

Ответить

Номер ответа: 7
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #7 Добавлено: 28.11.05 02:49
HACKER, в массиве могут быть непечатные символы, типа 0. В какой строке ты их собрался выводить?


судя по цитате:
примерно вот так:
255 15 44 58 69 245 200 128 и т.д.
выводить нужно код символа, а даже у непечатаемого сивола вполне печатаемый код ;)

При чтении файла, в Get можно указывать какой именно байт прочитать из файла, это решает
А если требуется сразу перейти на середину или на конец. Чито тогда делать.


Просто объявлять массив на 62 мб... :)
62*1024*1024=33554432 т.е.
ReDim sData(33554432) как бы многовато что ли...

Ответить

Номер ответа: 8
Автор ответа:
 HOOLIGAN



Вопросов: 0
Ответов: 1066
 Профиль | | #8 Добавлено: 28.11.05 12:18
И в чем их выводить?

Например в текстбоксе. Или в ричедите. А самый лучший вариант - в virtual listview. Он у тебя сам запросит строки, сообщив, с которой по которую ему нужно отображать.

Ответить

Номер ответа: 9
Автор ответа:
 Alex



Вопросов: 13
Ответов: 26
 Web-сайт: metalosplav.ru
 Профиль | | #9
Добавлено: 29.11.05 00:24
При чтении файла, в Get можно указывать какой именно байт прочитать из файла, это решает

Это понятно просто надо каждый раз к файлу обращатся.Как то не входит в планы задания.

Просто объявлять массив на 62 мб... :)
62*1024*1024=33554432 т.е.
ReDim sData(33554432) как бы многовато что ли...

Ну это смотря у кого сколько оперы.

Например в текстбоксе. Или в ричедите. А самый лучший вариант - в virtual listview. Он у тебя сам запросит строки, сообщив, с которой по которую ему нужно отображать.

В текстбоксе или в ричедите надо как то визуально создать ScrollBar чтоб можно было бегать по кускам. А вот насчет virtual listview можно поподробней.

Ответить

Номер ответа: 10
Автор ответа:
 HOOLIGAN



Вопросов: 0
Ответов: 1066
 Профиль | | #10 Добавлено: 29.11.05 01:15
virtual listview - это листвью, созданный на API, с указанием стиля LVS_OWNERDATA. Специально для больших объемов информации. Сам листвью информации не хранит, поэтому памяти не расходует. Он знает только количество итемов (строк), которое он должен отображать. Когда ему нужно отобразить своё содержимое (например при перерисовке окна, или когда юзер тянет скроллбар), он посылает родителю (форме) сообщение WM_NOTIFY с нотификационным кодом LVN_GETDISPINFO. С этим сообщением он также указывает, с какой по какую строку ему надо отобразить. Например в лист влезает 20 строк, и ему нужна информация об этих строках, чтобы отобразить их. Для каждой строки, требующей отображения он пришлет сообщение, на которое нужно подготовить из набора байт читабельную строку и вернуть ему эту готовую строку. Которую он отобразит. Подготовить 20 строк - делается быстро, никаких задержек нет. Так что нужен только массив самих байт, преобразованное в строку хранить необходимости нет, все преобразовывается в строковый вид по ходу отображения.
Это специальный способ для того, чтобы не загромождать память информацией, которая не требуется в данный момент.

Ответить

Номер ответа: 11
Автор ответа:
 Alex



Вопросов: 13
Ответов: 26
 Web-сайт: metalosplav.ru
 Профиль | | #11
Добавлено: 29.11.05 02:02
А можно какой нибудь реальный рабочий пример. Вроде как основную суть я уловил.

Ответить

Номер ответа: 12
Автор ответа:
 HOOLIGAN



Вопросов: 0
Ответов: 1066
 Профиль | | #12 Добавлено: 29.11.05 15:28
На vb нету. Есть на си, на асме, также видел на powerbasic.

Ответить

Номер ответа: 13
Автор ответа:
 Alex



Вопросов: 13
Ответов: 26
 Web-сайт: metalosplav.ru
 Профиль | | #13
Добавлено: 30.11.05 00:11
Понятно придется мутить че нит с текст боксом или пикчуре боксом.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам