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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как осуществить?!. 
:(
    Опции темы
maza
  Дата 14.6.2004, 08:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Как осуществить запись нужного мне текста из Edit'a в определённое место в тектовом файле?
PM MAIL   Вверх
Pakshin A. S.
Дата 14.6.2004, 08:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



1) Работа через RichEdit
2) Робота с нетипизированными файлами
PM   Вверх
maza
  Дата 14.6.2004, 09:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Если не затруднит, можно небольшой пример кода rolleyes.gif:
PM MAIL   Вверх
youri
Дата 15.6.2004, 05:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Как ни странно, с небольшим не сложилось.

Могу тебе предложить такую процедуру (DFileName - имя файла, в который надо вставить содержимое RichEdit; RichEdit - RichEdit, содержимое которого надо вставить в файл). Есть два нюанса: 1. нет обработки ошибок; 2. указывая параметр InsertionPoint, надо учитывать, что в конце строки есть два символа (0x0D и 0x0A)

Код
procedure InsertRichEdit2File(DFileName: string; RichEdit: TRichEdit; InsertionPoint: longint);
const
SizeOfBuffer = 1024;
type
TBuffer = array[0..SizeOfBuffer-1] of Byte;
var
TemporaryFile1, TemporaryFile2 :TFileStream;
DestinationFile :TFileStream;
Buffer :^TBuffer;
Count :longint;
TF1_Size, SecondBlock :longint;
begin
GetMem(Buffer,sizeof(TBuffer));

// Сохраняем содержимое RichEdit в файле 1.tmp
TemporaryFile1 := TFileStream.Create('1.tmp', fmCreate);
TemporaryFile1.Write(RichEdit.Lines.Text[1],
 Length(RichEdit.Lines.Text));
TemporaryFile1.Free;

// Открываем файл-назначение, 1.tmp и 2.tmp
TemporaryFile1 := TFileStream.Create('1.tmp', fmOpenRead);
TemporaryFile2 := TFileStream.Create('2.tmp', fmCreate);
DestinationFile := TFileStream.Create(DFileName, fmOpenRead);

// Определяем количество байт от точки вставки
// до конца файла DestinationFile
SecondBlock := DestinationFile.Size - InsertionPoint;

// Записываем в 2.tmp часть файла
// DestinationFile от начала до точки вставки
while InsertionPoint<>0 do
begin
 if InsertionPoint>SizeOfBuffer then
  Count := SizeOfBuffer
 else
  Count := InsertionPoint;
 DestinationFile.Read(Buffer^,Count);
 TemporaryFile2.Write(Buffer^,Count);

 InsertionPoint := InsertionPoint - Count;
end;

// Записываем в файл 2.tmp содержимое файла
// 1.tmp (оно же содержимое RichEdit)
TF1_Size := TemporaryFile1.Size;
while TF1_Size<>0 do
begin
 if TF1_Size>SizeOfBuffer then
  Count := SizeOfBuffer
 else
  Count := TF1_Size;
 TemporaryFile1.Read(Buffer^,Count);
 TemporaryFile2.Write(Buffer^,Count);

 TF1_Size := TF1_Size - Count;
end;

// Записываем в файл 2.tmp оставшуюся часть
// файла DestinationFile
while SecondBlock<>0 do
begin
 if SecondBlock>SizeOfBuffer then
  Count := SizeOfBuffer
 else
  Count := SecondBlock;
 DestinationFile.Read(Buffer^,Count);
 TemporaryFile2.Write(Buffer^,Count);

 SecondBlock := SecondBlock - Count;
end;

// Делаем так, чтобы файл-назначение содержал то,
// что нам нужно
TemporaryFile1.Free;
TemporaryFile2.Free;
DestinationFile.Free;
DeleteFile(DFileName);
DeleteFile('1.tmp');
RenameFile('2.tmp',DFileName);

FreeMem(Buffer);
end;


Пример использования:

Код
procedure TForm1.Button1Click(Sender: TObject);
begin
InsertRichEdit2File('1.txt', RichEdit1, 13);
end;

PM   Вверх
Medved
Дата 15.6.2004, 05:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 7209
Регистрация: 15.9.2002
Где: Kazakhstan, Astan a

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



М
 
2maza. Убедительная просьба не нарушать правила форума. Заголовок темы должен отражать ее суть!



--------------------
http://extreme.sport-express.ru/
...и неважно сколько падал, важно сколько ты вставал...
PM MAIL WWW ICQ Skype GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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