Огромная проблема

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

Огромная проблема

Сообщение Santa » 24.05.2006 (Ср) 21:44

Проблема конвертации файла от одной программы для другой, не знаю как объяснить коротко и просто, не сочтите за флуд.
Дан файл токого содержания:
Код: Выделить всё
*-------------->
---
--@*>column<*#(Столбик 1)--line#3(--)--line#51(--)--*>column<*
---
--@*>column<*#(Столбик 2)--line#2564(-<amount>-<*amount>-)--line#3210(--)--*>column<*
---
--@*>column<*#(Столбик 3)--line#12(--)--line#21(--)--*>column<*
---
--@*>column<*#(Столбик 4)--line#129(--)--line#215(-<amount>-<*amount>-)--*>column<*
---
*--------------<

"-" - инфа не имеющая отношения к проблеме (кол. обсолютно разное, из-за этого размер файла от 300 до 3000 колобайт)
"@*>column<*#" - начало столбика
"*>column<*" - конец столбика
"line#" - строка и её номер, после решетки
"<amount>" - "<*amount>" - начало и конец ключевой записи


И из этого файла нужно найти слово "line#" и от скобки до скобки найти "<amount>", почему только от скобки до скобки, потому что в инфе не имеющей отношения к проблеме такая запись тоже встречается, но она нам не нужна.
В ключевой записи "<amount>" сравнить инфу с заданной, и если инфа соответствует, то вернутя выше и найти "@*>column<*#" и от него найти "*>column<*" и всё это скопировать в новый файл и тд. дописывая в один и тот же файл.
Новый файл должен выглядеть так:
Код: Выделить всё
@*>column<*#(Столбик 2)--line#2564(-<amount>-<*amount>-)--line#3210(--)--*>column<*
@*>column<*#(Столбик 4)--line#129(--)--line#215(-<amount>-<*amount>-)--*>column<*


Как это всё сделать ума не прилажу. Пробовал InStr, но для больших файлов не подходит. Считываю весь файл в массив,
Код: Выделить всё
Dim TheBytes() As Byte, SourceFile As String
SourceFile = "путь к файлу"
ReDim TheBytes(FileLen(SourceFile) - 1)
Open SourceFile For Binary As #1
  Get #1, , TheBytes()
Close #1


а как дальше не знаю.
Прошу отнестись с пониманием и помочь в решении проблемы или кодом с примерной задачей, очень нужно! :cry:
SIVIS PACEM PARA BELLUM

GLEB
Бывалый
Бывалый
 
Сообщения: 246
Зарегистрирован: 24.05.2005 (Вт) 12:16

Сообщение GLEB » 24.05.2006 (Ср) 21:56

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

GAGArin
Неистовый флудер
Неистовый флудер
 
Сообщения: 1777
Зарегистрирован: 23.12.2002 (Пн) 12:46
Откуда: я тут взялся, не знаю...

Сообщение GAGArin » 24.05.2006 (Ср) 23:02

Если просто не влазит в строку (не знаю какие там ограничения)
Рубишь файл на три части:
А
Б
В
Г
АБ, БВ, ВГ (включая концы) так чтоб работать со строкой, а дальше сплит в руки и вперед. Или рекурсия или один цикл с отступлениями и проверками. Ну и потом пробежаться и повыкидывать повторения.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 25.05.2006 (Чт) 2:53

Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас


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

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

Сейчас этот форум просматривают: AhrefsBot, SemrushBot, Yandex-бот и гости: 143

    TopList  
cron