Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа с бинарными файлами. 
V
    Опции темы
zzdxw
Дата 28.10.2014, 17:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 6.10.2014

Репутация: нет
Всего: нет



Доброго времени суток!
Помогите разобраться с бинарными файлами. Имеется форма. Нужно, чтобы при нажатии на кнопку "Загрузить из" загружался бинарный файл и поля Edit заполнялись соответствующими значениями (эти значения - перепады яркости изображения в пикселе), например: 

1 2 1
0 10 0
-1 -2 -1 

А при нажатии на "Сохранить в" введенные значения сохранялись в отдельный (или тот же) бинарный файл.

Присоединённый файл ( Кол-во скачиваний: 14 )
Присоединённый файл  вес.png 20,53 Kb
PM MAIL   Вверх
Poseidon
Дата 28.10.2014, 19:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 9
Всего: 133



Цитата(zzdxw @  28.10.2014,  17:28 Найти цитируемый пост)
Помогите разобраться с бинарными файлами.
Да мы и рады бы, только в данном виде просьба выглядет как "напишите за меня". Показывай как делаешь и что не получается, а мы тут поможем.



--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
zzdxw
Дата 28.10.2014, 20:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 6.10.2014

Репутация: нет
Всего: нет



Ну я почитал про операции с бинарными файлами. Но с чего начать вообще не знаю.
Все, что приходит в голову:
Код

procedure TForm2.Button2Click(Sender: TObject);
var
f:file of integer;
begin
if OpenDialog1.Execute then 
begin
Assignfile(f,''); // не знаю, что написать после f, у меня нет конкретного файла
Reset(f); // открываем для чтения , куда открываем понятия не имею
Read(F,); //какую переменную считывать тоже не представляю
end.


Ну, то есть понятно, что я новичок... Очень новичок.
PM MAIL   Вверх
bems
Дата 28.10.2014, 20:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 18
Всего: 88



Цитата(zzdxw @  28.10.2014,  20:19 Найти цитируемый пост)
не знаю, что написать после f, у меня нет конкретного файла

ну тогда придумай конкретный файл и его "напиши после f"

Цитата(zzdxw @  28.10.2014,  20:19 Найти цитируемый пост)
открываем для чтения , куда открываем понятия не имею

никуда. просто открываем.

Цитата(zzdxw @  28.10.2014,  20:19 Найти цитируемый пост)
какую переменную считывать тоже не представляю

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

Добавлено через 2 минуты и 19 секунд
Цитата(zzdxw @  28.10.2014,  20:19 Найти цитируемый пост)
у меня нет конкретного файла
у тебя же есть OpenDialog
если его метод Execute вернул True то имя файла будет в OpenDialog1.FileName



--------------------
Обижено школьников: 8
PM MAIL   Вверх
zzdxw
Дата 28.10.2014, 23:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 6.10.2014

Репутация: нет
Всего: нет



В общем, вот что получилось:
Код

procedure TForm2.Button2Click(Sender: TObject);
const
  MaxLen = 255;
var
  f:file;
  s:string[MaxLen];
  Cnt:integer;
begin
if opendialog1.Execute then
begin
  AssignFile(f, opendialog1.FileName);
  FileMode:=fmOpenRead;
  Reset(f,1);
  blockread(f,s[1], MaxLen, Cnt);
  SetLength(s, Cnt);
  closefile(f);
  edit1.text:=s;
end;
end;


Я создал в HEX'е файл, оттуда считываются значения. В Edit1 записывается значение из первой строки из файла. Как мне сделать, чтобы в Edit2 записывалось значение из второй строки и т.д.?
PM MAIL   Вверх
SlaUr
Дата 30.10.2014, 16:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 408
Регистрация: 18.9.2003

Репутация: 1
Всего: 5



Код

var
  Form1: TForm1;
 F1:text;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
VAR St1:string;i1:integer;
begin
i1:=0;
AssignFile(F1,'d:\tmp\1.txt') ;{$I-}Reset(F1);        {$I+}
if IORESULT=0 then
  begin While not Eof(F1) do
     begin
       ReadLn(F1,St1);
       inc(i1);
       if i1=1 then Edit1.Text:=st1;
       if i1=2 then Edit2.Text:=st1;
     end;
   {$I-}CloseFile(f1){$I+};if IORESULT<>0 then;
  end;
end;

end.
 

Это для текстовых файлов
Цитата

В Edit1 записывается значение из первой строки из файла.

т.е. у вас файл состоит из строк
Если вы все же хотите работать с бинарным файлом то нужно в цикле считывать файл в массив (char) и искать последовательность символов #13#10 это разделитель строк.

Это сообщение отредактировал(а) SlaUr - 31.10.2014, 09:51
PM MAIL   Вверх
zzdxw
Дата 1.11.2014, 15:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 6.10.2014

Репутация: нет
Всего: нет



Разобрался. Вот рабочий код, если кому понадобится.
Код

procedure TForm2.Button2Click(Sender: TObject);
var
  coefs: array[1..9] of integer;
begin
if opendialog1.Execute then
  begin
    fs:=TFileStream.Create(opendialog1.FileName,fmOpenRead);

        fs.Seek(0,soFromBeginning);
        fs.Read(coefs,SizeOf(integer)*Length(coefs));
        Edit1.Text:=inttostr(coefs[1]);
        Edit2.Text:=inttostr(coefs[2]);
        Edit3.Text:=inttostr(coefs[3]);
        Edit4.Text:=inttostr(coefs[4]);
        Edit5.Text:=inttostr(coefs[5]);
        Edit6.Text:=inttostr(coefs[6]);
        Edit7.Text:=inttostr(coefs[7]);
        Edit8.Text:=inttostr(coefs[8]);
        Edit9.Text:=inttostr(coefs[9]);
        fs.Free;
      end;
  end;

procedure TForm2.Button3Click(Sender: TObject);
var
coefs: array[1..9] of integer;
begin

coefs[1]:=StrToInt(Form2.Edit1.Text);
coefs[2]:=StrToInt(Form2.Edit2.Text);
coefs[3]:=StrToInt(Form2.Edit3.Text);
coefs[4]:=StrToInt(Form2.Edit4.Text);
coefs[5]:=StrToInt(Form2.Edit5.Text);
coefs[6]:=StrToInt(Form2.Edit6.Text);
coefs[7]:=StrToInt(Form2.Edit7.Text);
coefs[8]:=StrToInt(Form2.Edit8.Text);
coefs[9]:=StrToInt(Form2.Edit9.Text);

if SaveDialog1.Execute then
  begin
    fs:=TFileStream.Create(SaveDialog1.FileName, fmCreate);
    try
    fs.Write(coefs, SizeOf(integer)*Length(coefs));
  finally
    fs.Free;
  end;
end;
end;

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0991 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.