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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.10.2008, 16:00   #1
AngelOfDeath
Delphi/C++/Asm
Форумчанин Подтвердите свой е-майл
 
Аватар для AngelOfDeath
 
Регистрация: 28.03.2008
Сообщений: 358
Печаль Создал свой формат файла. Теперь надо считать строки из него...

Вот в целях самообучения решил создать свой текстовый формат файла
Который будет содержать информацию о цвете, размере шрифта
Но немогу сделать запись всех строк из мемо в файл
Вот код записи:
Код:
procedure TForm2.N3Click(Sender: TObject);
var
t:TFileStream;
colors:array [0..2] of Byte;
i:Integer;
begin
t:=TFileStream.Create('1.ftr',fmCreate);
t.Seek(0,soFromBeginning);
colors[0]:=GetRValue(FontDialog1.Font.Color);
colors[1]:=GetGValue(FontDialog1.Font.Color);
colors[2]:=GetBValue(FontDialog1.Font.Color);
for I := 0 to 2 do
begin
t.Write(colors[i],3);
end;
t.Seek(50,soFromBeginning);


t.Free;
end;
Вот чтения:
Код:
procedure TForm2.N2Click(Sender: TObject);
var
t:TFileStream;
clor: array [0..2] of Byte;
i:Integer;
max:Integer;
begin
t:=TFileStream.Create('1.ftr',fmOpenRead);
t.Seek(0,soFromBeginning);
for I := 0 to 2 do
begin
t.Read(clor[i],3);
end;
FontDialog1.Font.Color:=RGB(clor[0],clor[1],clor[2]);




t.Free;
Memo1.Font.Color:=FontDialog1.Font.Color;
end;
Как мне сделать считывание текста с 50 байта?

Вот исходник:
Вложения
Тип файла: zip MyFormat.zip (7.0 Кб, 12 просмотров)

Последний раз редактировалось AngelOfDeath; 19.10.2008 в 16:01. Причина: Исходник забыл
AngelOfDeath вне форума Ответить с цитированием
Старый 19.10.2008, 17:08   #2
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

вроде человек умный.... тебе метод seek для чего?
для перемещения указателя файла используется метод seek первый параметр это число байт, на которое надо сместиться, второй параметр флаги
rpy3uH вне форума Ответить с цитированием
Старый 19.10.2008, 17:14   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Но немогу сделать запись всех строк из мемо в файл
У-у-у БД плачет.
Или INI Фалы что еще лучше
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 20.10.2008, 00:24   #4
AngelOfDeath
Delphi/C++/Asm
Форумчанин Подтвердите свой е-майл
 
Аватар для AngelOfDeath
 
Регистрация: 28.03.2008
Сообщений: 358
Вопрос

Цитата:
Сообщение от rpy3uH Посмотреть сообщение
вроде человек умный.... тебе метод seek для чего?
для перемещения указателя файла используется метод seek первый параметр это число байт, на которое надо сместиться, второй параметр флаги
Это я знаю...

Цитата:
У-у-у БД плачет.
Или INI Фалы что еще лучше
А это к чему?

Ладно переформулирую вопрос:
Что нужно записать
Код:
   t.Write(cюда, Sizeof(Сюда));
Чтоб записать строки из мемо1?
t это TfileStream

Нашёл небольшое решение:
Код:
t.WriteComponent(Memo1);
Код:
t.ReadComponent(Memo1);
Но, там добавляется куча ненужных байт (где-то 60)

Последний раз редактировалось AngelOfDeath; 20.10.2008 в 10:58.
AngelOfDeath вне форума Ответить с цитированием
Старый 21.10.2008, 00:56   #5
AngelOfDeath
Delphi/C++/Asm
Форумчанин Подтвердите свой е-майл
 
Аватар для AngelOfDeath
 
Регистрация: 28.03.2008
Сообщений: 358
По умолчанию

Ну чтож, спасибо за "ответ"
AngelOfDeath вне форума Ответить с цитированием
Старый 21.10.2008, 09:20   #6
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Почитай про TFileStream и все вопросы отпадут. Серьезно, это будет лучше чем мы тебе будем пересказывать.

TFileStream позволяет считать любое кол-во байт из любого места. Что еще нужно для своего формата?
Делай метки в нужных местах, если твой формат сложный с разными блоками данных. Например тег в mp3 файле начинается после метки ID3 или TAG.

txt формат простой как три копейки, там одни только данные, никакой структуры, как его можно сделать в своем варианте? Если же он у тебя наподобии INI или XML (с тегами) то почитай про эти форматы, как у людей сделано, и поймешь как тебе лучше сделать.

Кстати с текстовыми форматами будет удобнее работать не через TFileStream а обычными средствами работы с текстовыми файлами.

Цитата:
Как мне сделать считывание текста с 50 байта?
Seek(50,soFromBeginning);
А дальше считывай в буфер (массив чаров или строк с огр. длиной) столько байт, сколько в этих строках. Если кол-во их может меняться сделай на позиции 50 сначала метку сколько байт нужно считать, метка 1, 2 или 4 байта, смотря сколько их там может быть. Вобщем экспериментируй.
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог

Последний раз редактировалось mutabor; 21.10.2008 в 09:35.
mutabor вне форума Ответить с цитированием
Старый 21.10.2008, 09:53   #7
AngelOfDeath
Delphi/C++/Asm
Форумчанин Подтвердите свой е-майл
 
Аватар для AngelOfDeath
 
Регистрация: 28.03.2008
Сообщений: 358
По умолчанию

Цитата:
txt формат простой как три копейки, там одни только данные, никакой структуры, как его можно сделать в своем варианте?
Я хочу в нём сохранять цвет, шрифт и размер
Вобщем буду пытаться...

Во сделал код записи
Код:
procedure TForm2.N3Click(Sender: TObject);
var
t:TFileStream;
colors:array [0..2] of Byte;
i:Integer;
str:array of string;
begin
t:=TFileStream.Create('1.ftr',fmCreate);
t.Seek(0,soFromBeginning);
colors[0]:=GetRValue(FontDialog1.Font.Color);
colors[1]:=GetGValue(FontDialog1.Font.Color);
colors[2]:=GetBValue(FontDialog1.Font.Color);
for I := 0 to 2 do
begin
t.Write(colors[i],2);
end;
t.Seek(50,soFromBeginning);
SetLength(str,Memo1.Lines.Count);
for I := 0 to Memo1.Lines.Count-1 do
  begin
    str[i]:=Memo1.Lines[i];
    t.Write(str[i],Length(str[i]));
  end;
t.Free;
end;
Всё записывает

Последний раз редактировалось AngelOfDeath; 21.10.2008 в 10:07.
AngelOfDeath вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создать свой формат файла Манжосов Денис :) Общие вопросы Delphi 7 24.08.2008 17:48
считать из файла две строки, вывести на экран символы первой строки, которые отсутствуют во второй gotex Помощь студентам 4 08.05.2008 02:27
Свой шифрованый формат на Builder 6 Руслантус C++ Builder 2 25.03.2008 12:34
Как создать свой формат? Rahim1993 Общие вопросы Delphi 2 04.03.2008 17:04
Как в Microsoft Visual Basic 6.0 открыть Exel файл, считать с него данные(числа) и дальше работать с ними Dimon88 Microsoft Office Excel 7 20.10.2007 13:30