Visual Basic, .NET, ASP, VBScript
 

   
   
     

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

Страница: 1 |

 

  Вопрос: Как быстро из файла взять данные? Добавлено: 13.01.06 10:56  

Автор вопроса:  Glyckmen
У меня по этому поводу есть два вопроса:
1. Мне надо быстро занести в массив побайтно файл размером 16 Мб (можно и не в массив но главное что-бы по адресу байта я мог потом быстро извлечь значение)
2. Мне надо из текстового файла вынуть данные которые заключены в теги (мне нужны только данные которые заключены в кавычки) строковыми функциями пользоваться не хочу-это тормозит программу, знаю что можно эти теги обрабатывать напрямую, но не знаю как.
Пожалуйста подскажите как все это сделать наилутшем и быстрым образом.

Пример файла с тегами:
<?xml version="1.0" encoding="Windows-1251"?>
<patch version="0.3">
 <info title="FotoCool" id="10B4A691" group="Телефонная книга" version="0.1A">
  <description short="Позволяет ставить фотографии в записной книжке на абонента и отображение этой фотографии при входящем звонке." />
  <author nickname="Glyckmen" fullname="Нолькен Сергей Владимирович" status="Автор" email="nolken@mail.ru" www="" icq="" />
 </info>
 <patchdata firmware="X600XEDL2" mode="C100" language="1" (Английский) >
  <changes>
   <nord offset="0x00404654" from="FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" to="D0A4D0BED182D0BED0B3D180D0B0D184D0B8D0B80000D0A1D182D0B0D0BDD0B4D0B0D180D182D0BDD18BD0B50000D091D0B5D0B720D0B8D0B7D0BED0B1D180D0B0D0B6D0B5D0BDD0B8D18F00" type="DATA" />
</changes>
</patchdata>
</patch>

Ответить

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

Номер ответа: 1
Автор ответа:
 [root]



Вопросов: 45
Ответов: 1212
 Web-сайт: bit.pirit.info
 Профиль | | #1
Добавлено: 13.01.06 11:14
Вот почитай эту тему:
http://vbnet.ru/forum/show.aspx?id=95978
Мне тут помогли, дали пример.
Открываем текстовый файл For Binary и заносим в буфер, потом разделяем в массив и сохраняем каждый элемент массива отделно.
В принципе его можно переделать под ковычки, только нужны прямые руки - явно не мои!

Ответить

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



Вопросов: 7
Ответов: 22
 Профиль | | #2 Добавлено: 13.01.06 11:33
Да забыл добавить (на всякий случай), в первом посте описаны проблемы с разными файлами, сначала мне надо загрузить двоичный файл размером 16Мб , и только потом текстовый с тегами в котором хранятся данные для изменения первого двоичного файла

Ответить

Номер ответа: 3
Автор ответа:
 Павел



Администратор

ICQ: 326066673 

Вопросов: 368
Ответов: 5968
 Web-сайт: www.vbnet.ru
 Профиль | | #3
Добавлено: 13.01.06 11:41
Думаю, для парсинга XML поможет MSXML.

Ответить

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



Вопросов: 7
Ответов: 22
 Профиль | | #4 Добавлено: 13.01.06 11:48

ПавелНу вставил я объект MSXML (если я правильно понял что это объект), а дальше что делать, какие свойства, методы и т.д. как мне вынуть данные тегов? (Я могу конечно и так взять данные используя MID STRING и т.п. но только это будет не профессионально и долго, а с такой проблемой я столкнулся в первый раз, вот и застрял!)

Ответить

Номер ответа: 5
Автор ответа:
 mc-black



ICQ: 308-534-060 

Вопросов: 20
Ответов: 1860
 Web-сайт: mc-black.narod.ru/dzp.htm
 Профиль | | #5
Добавлено: 13.01.06 12:04
дальше что делать, какие свойства, методы и т.д. как мне вынуть данные тегов?


это тебе предстоит и выяснить ;) подумай. msxml кажется для этого и нужен. А для чего тебе массив нужен в программе?

Ответить

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



Вопросов: 7
Ответов: 22
 Профиль | | #6 Добавлено: 13.01.06 12:12

А для чего тебе массив нужен в программе?


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

то тебе предстоит и выяснить ;) подумай. msxml кажется для этого и нужен

Я его у себя чего-то не нашел, где он должен быть и как полное имя этого компонента, что-бы найти в ручную.

Ответить

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



Вопросов: 1
Ответов: 101
 Профиль | | #7 Добавлено: 13.01.06 15:29
GlyckmenТак как ты делаешь машина наверное тормозит?? VB никогда ноpмально не делал буфеpизацию ввода-вывода.Ведь с каждым чтением байта он обращается к API,поэтому и медленно. Так что тебе поможет чтение массива байтов за один заход.

Ответить

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



Вопросов: 7
Ответов: 22
 Профиль | | #8 Добавлено: 13.01.06 16:08

Так что тебе поможет чтение массива байтов за один заход.


Код пожалуйста в студию.
Если-бы я знал как это сделать то наверно не задовал вопрос. Будте так добры примерчик можно посмотреть.

Ответить

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


 

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

Вопросов: 236
Ответов: 8362
 Профиль | | #9 Добавлено: 13.01.06 16:17
Open... for binary
Get...
Close

Split...
?

Ответить

Номер ответа: 10
Автор ответа:
 [root]



Вопросов: 45
Ответов: 1212
 Web-сайт: bit.pirit.info
 Профиль | | #10
Добавлено: 13.01.06 16:26
Ещё раз:
Открываем текстовый файл For Binary и заносим в буфер. Делаем константу " и ищем след. "
Потом разделяем в массив и делаем что нужно.

Ответить

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



Вопросов: 1
Ответов: 101
 Профиль | | #11 Добавлено: 16.01.06 15:10
Glyckmen
Open "путь к файлу +имя" for binary as #1
dim Arr(длина данных,назовём её N) as byte
get #1, N, Arr
close #1

Думаю это тебе поможет окончательно :)

Ответить

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



ICQ: 496782368 

Вопросов: 18
Ответов: 312
 Web-сайт: starsorion.com
 Профиль | | #12
Добавлено: 16.01.06 19:37
Hi all!
Clyckmen:
Как выше было описано,всё правильно насчёт чтения файла в режиме Bynary.В этом режиме Basic, чтение и запись выполняет очень быстро.Гораздо быстрее чем Input и Output.Тем более,что строки и байтовые массивы-это что-то похожее...Хотя бы одно то,что можно присвоить строку байтовому массиву и наоборот...

Вот чтение файла в динамический массив и переопределение динамического массива в соответствии с размером файла.
Dim intN as integer
Open App.Path & "\test.txt" For Bynary as #1
ReDim bytBuf(1 to LOF(1)) as Byte
Get #1,,bytBuf()
For intN=LBound(bytBuf) To UBound(bytBuf)
  Print Chr(bytBuf(intN));
Next intN
Close #1

С ув. Alex

Ответить

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



Вопросов: 7
Ответов: 22
 Профиль | | #13 Добавлено: 21.01.06 15:02
Спасибо всем, кто откликнулся. Разобрался.
Моя ошибка заключалась в том что я в режиме Bynary все равно считывал по байтно, мой код приблизительно выглядел так:

dim massiv(0 to 16777215) as byte
dim i as long
Open "имя файла" for bynary as #1
for i=1 to 16777216
get #1,1,massiv(i-1)
next i
close #1

Еще раз спасибо за помощь!
PS: На самом деле я не знал что код
Get #1,,massiv()

запишет сразу побайтно и поэлементно в масив.

Ответить

Страница: 1 |

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



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