Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 19.09.2011, 12:44
Darkstarko Darkstarko вне форума
Прохожий
 
Регистрация: 19.09.2011
Сообщения: 12
Репутация: -3458
Восклицание Чтение файла по структуре

Проблема: есть файл, известна его структура в таком виде
Код:
<data type="int" name="ID" format="signed" len="4" display=""/>
<data type="int" name="" format="signed" len="4" display=""/>
<data type="int" name="" format="signed" len="4" display=""/>
<data type="int" name="Count_Points" format="signed" len="4" display=""/>
<for name="Point" count="Count_Points" stop_test="" type_name="" comment="">
<struct name="point" type_name="" comment="" expr="">
<data type="real" name="X" format="ieee" len="4" display=""/>
<data type="real" name="Altitude" format="ieee" len="4" display=""/>
<data type="real" name="Z" format="ieee" len="4" display=""/>
<data type="real" name="Direction_X" format="ieee" len="4" display=""/>
<data type="real" name="Direction_Altitude" format="ieee" len="4" display=""/>
<data type="real" name="Direction_Z" format="ieee" len="4" display=""/></struct>
</for><data type="int" name="Count_Segments" format="signed" len="4" display=""/>
и т.д.
тоесть указаны типы данных и их тип
нужно считать в динамические массивы(количество элементов массива соответствует количеству элементов в файле) что то с ними сделать(отредактировать файл) и сохранить обратно
как это сделать? Заранее спасибо

структура файла задается в коде, поиск использовал(гугл тоже) но ничего подходящего под данную задачу не нашел, надеюсь на вашу помощь
Ответить с цитированием
  #2  
Старый 19.09.2011, 15:34
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Судя по внешнему виду у вас вариант XML-файла. То что вы показали, просто описатель данных. Считать этот описатель я думаю можно с помощью TXMLDocument.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #3  
Старый 19.09.2011, 15:37
Darkstarko Darkstarko вне форума
Прохожий
 
Регистрация: 19.09.2011
Сообщения: 12
Репутация: -3458
По умолчанию

видимо я нечетко обьяснил
структуру парсить ненужно, она не динамическая и поэтому задаются все параметры массивов программно, но как загрузить данные в массивы - я незнаю
структура дает имя элемента, длинну блока, тип и т.д., нужно описать массивы по этим данным, загрузить в них данные, раскидать данные по компонентам, сохранить инфу обратно в файл
блокрид внятных примеров не имеет, по крайней мере в гугле, так что прошу помощи у вас
Ответить с цитированием
  #4  
Старый 19.09.2011, 16:40
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Если я правильно понял, то данные у вас идут непрерывным блоком в отдельном файле. Вот считать их и проблема?
Делается это, вы правильно поняли, через BlockRead или можно использовать специальный класс TFileStream.
В любом случае будет примерно так:
Читаем первые 16 байт из файла. Если нам нужен далее идентификатор записи, то читаем сначала в него 4 байта, а потом пропускам 8 байт (они не несут инфы). Далее читаем 4 байта - это у нас уже буде количество точек (структура точек у вас жестко задана поэтому под нее можно сформировать Record общей длиной 24 байта). Считываете блоки данных по 24 байта столько раз, сколько задано точек ранее. Далее вы повторяете весь блок операций снова.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.

Последний раз редактировалось Страдалецъ, 19.09.2011 в 16:44.
Ответить с цитированием
  #5  
Старый 19.09.2011, 16:56
Darkstarko Darkstarko вне форума
Прохожий
 
Регистрация: 19.09.2011
Сообщения: 12
Репутация: -3458
По умолчанию

скорее всего это сработает, но не могли бы помочь с листингом?
особенно потока)
Ответить с цитированием
  #6  
Старый 19.09.2011, 17:25
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Вы точно дали все описание? Меня смущает вот эта строчка:
</for><data type="int" name="Count_Segments" format="signed" len="4" display=""/>
Предполагается что ранее должен быть где-то задан Count_Segments, а я его в описании не вижу.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #7  
Старый 22.09.2011, 13:39
Аватар для Konrad
Konrad Konrad вне форума
Эксперт
 
Регистрация: 19.03.2009
Сообщения: 1,261
Репутация: 45834
По умолчанию

С этого:
Код:
ype="int" name="Count_Segments" format="signed" len="4" display=""/>
Тебе нужно считать:
Count_Segments signed 4

?
Ответить с цитированием
  #8  
Старый 22.09.2011, 18:48
Darkstarko Darkstarko вне форума
Прохожий
 
Регистрация: 19.09.2011
Сообщения: 12
Репутация: -3458
По умолчанию

Да нет же, считывать ничего не нужно из структуры, она статическая и задается программно. нужно считать из файла информацию(и записать измененную) по данным из структуры
Ответить с цитированием
  #9  
Старый 22.09.2011, 18:58
Аватар для Konrad
Konrad Konrad вне форума
Эксперт
 
Регистрация: 19.03.2009
Сообщения: 1,261
Репутация: 45834
По умолчанию

Цитата:
Сообщение от Darkstarko
Да нет же, считывать ничего не нужно из структуры, она статическая и задается программно. нужно считать из файла информацию(и записать измененную) по данным из структуры
Так-с... тогда пример в студию.
Что есть, и что нужно:
1.
2.
3.
....

Что именно находится в файле.
В каком формате.
И т.д.
Ответить с цитированием
  #10  
Старый 23.09.2011, 12:11
Darkstarko Darkstarko вне форума
Прохожий
 
Регистрация: 19.09.2011
Сообщения: 12
Репутация: -3458
По умолчанию

Есть файл, *.sev, выше дана структура этого файла в окторой написано в каких блоках какая информация
1) нужно считать из файла в массивы информацию
2) нужно раскидать информацию по компонентам и отредактировать
3) нужно сохранить измененную инфу в файл
Ответить с цитированием
  #11  
Старый 23.09.2011, 12:29
Аватар для Konrad
Konrad Konrad вне форума
Эксперт
 
Регистрация: 19.03.2009
Сообщения: 1,261
Репутация: 45834
По умолчанию

Цитата:
Сообщение от Darkstarko
Есть файл, *.sev, выше дана структура этого файла в окторой написано в каких блоках какая информация
1) нужно считать из файла в массивы информацию
2) нужно раскидать информацию по компонентам и отредактировать
3) нужно сохранить измененную инфу в файл
Я просил пример. Где он?
Экстрасенсов тут нету.

Пример, это значит:
PHP код:
В файле находитсянапримертакая информация:
123234 345235 пве4к 345635 54765 34е654 
Мне нужно
:
считать 345235. 

П.с.: уже порядком поднадоело отвечать в таких вот темах.
Незанете и не хочете знать, не понимаете что делать и не можете сформулировать,
идите =====================>>>>>>>>>>>>>>>> [s]на[/s] в раздел работа.
http://www.delphisources.ru/forum/forumdisplay.php?f=34

Последний раз редактировалось Konrad, 23.09.2011 в 12:38.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 16:33.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025