Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Как осуществить?!.


Автор: maza 14.6.2004, 08:31
Как осуществить запись нужного мне текста из Edit'a в определённое место в тектовом файле?

Автор: Pakshin A. S. 14.6.2004, 08:46
1) Работа через RichEdit
2) Робота с нетипизированными файлами

Автор: maza 14.6.2004, 09:56
Если не затруднит, можно небольшой пример кода rolleyes.gif:

Автор: youri 15.6.2004, 05:52
Как ни странно, с небольшим не сложилось.

Могу тебе предложить такую процедуру (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;

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

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)