Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.12.2013, 20:45   #1
0parol0lorap0
Пользователь
 
Регистрация: 05.10.2013
Сообщений: 13
Вопрос Как работать с большими файлами через потоки в Delphi ?

Собственно как работать с потоками худо-бедно в Delphi Я разобрался, но проблема в том что на зачет преподаватель дал задачи с ОПРЕДЕЛЕННЫМ условием решения и поэтому решение этих задач, для меня проблематично. Вот собственно условия к задачам и сами задачи:

http://www.image123.net/9f2xkgb60mnppic.html

P.S. И ещё, если Я правильно понял преподавателя эти задачи нужно решить через класс TFileStream. Хотя Я могу и ошибаться...

Последний раз редактировалось 0parol0lorap0; 17.12.2013 в 20:49.
0parol0lorap0 вне форума Ответить с цитированием
Старый 17.12.2013, 23:08   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А что там в задаче такого невыполнимого?
Что именно тебя смутило из всего того текста.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 17.12.2013, 23:27   #3
0parol0lorap0
Пользователь
 
Регистрация: 05.10.2013
Сообщений: 13
По умолчанию

1) Создать класс, Эмулирующий собой массив символов (посредством свойства-массива).
2) Памятью для хранения массива является поток данных.
3) Считается, что в задаче один символ занимает 2 байта.

По пункту "3)", Я немного понял откуда ветер дует. Если Я не ошибаюсь то нужно размер считываемых блоков установить равным SizeOf(WideChar) = 2 байта, ну т.е. кажется так: Reset(f, SizeOf(WideChar));

В остальном все более мене понятно, хотя и туманно... ))
0parol0lorap0 вне форума Ответить с цитированием
Старый 18.12.2013, 11:03   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
кажется так
В целом логично.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 18.12.2013, 11:22   #5
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,551
По умолчанию

Извиняюсь, что не по теме, но почему вы пишете "Я" с большой буквы?
Arigato вне форума Ответить с цитированием
Старый 18.12.2013, 13:39   #6
0parol0lorap0
Пользователь
 
Регистрация: 05.10.2013
Сообщений: 13
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
В целом логично.
Ага, значит пункт "3)" отпадает, и все же остаются пункты "1)" и "2)".
0parol0lorap0 вне форума Ответить с цитированием
Старый 18.12.2013, 13:45   #7
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Делаешь свойство массивного типа. Индекс - порядковый номер символа.
В ридере проверка на допустимость индекса с учетом того, что символ 2 байта, и считывание из FileStream по заданному смещению двух байт. Во врайтере аналогично, только запись в FileStream двух байт

ОФФТОП
Цитата:
почему вы пишете "Я" с большой буквы?
Наверно очень большой парень
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 18.12.2013 в 13:48.
Аватар вне форума Ответить с цитированием
Старый 18.12.2013, 14:51   #8
0parol0lorap0
Пользователь
 
Регистрация: 05.10.2013
Сообщений: 13
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Делаешь свойство массивного типа. Индекс - порядковый номер символа.
Так... ?
Код:
type
  TOurComponent = class(TComponent)
  private
    { Private declarations }
    FArrayProp: array[0..9] of integer;
    function GetArrayProp(aIndex: integer): integer;
    procedure SetArrayProp(aIndex: integer; const Value: integer);
  protected
    { Protected declarations }
  public
    { Public declarations }
    property ArrayProp[aIndex: integer]: integer read GetArrayProp
    write SetArrayProp;
  published
    { Published declarations }
end;

Цитата:
Сообщение от Аватар Посмотреть сообщение
В ридере проверка на допустимость индекса с учетом того, что символ 2 байта, и считывание из FileStream по заданному смещению двух байт.
Не совсем понял... Считывать из файла вот так "f1.ReadBuffer(simvol,SizeOf(WideCh ar));", если да, то как проверять ?
0parol0lorap0 вне форума Ответить с цитированием
Старый 18.12.2013, 14:58   #9
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Ну тип ArrayProp явно не Integer. Возвращается два байта, лучше Word. Проверять - есть размер файла и индекс, вот и проверяй что бы по этом индексу не выскочить за пределы файла
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с большими файлами. ShamanK C# (си шарп) 12 05.04.2012 19:41
VC++ EE 2005 Как работать с реестром/ini файлами? Alexei91 Visual C++ 1 15.01.2011 11:02
Как работать с *.xls файлами без Excel'я? Нур Общие вопросы Delphi 8 15.12.2010 07:16
Как с tFileStream работать с уже открытыми файлами? Altera Общие вопросы Delphi 5 12.05.2009 20:02
Как работать с dll файлами Artem Общие вопросы Delphi 7 21.09.2007 13:45