Вниз
Скачать: CL | DM;

Memo и строки   Найти похожие ветки 

 
Neiroman ©   (2005-12-18 02:37) [0]

Здравствуйте! Подскажите, пожалуйста, как решить проблему: есть текстовый файл и Memo. Как в Memo из этого файла загрузить строки, но не все (LoadFromFile не подходит, т.к. тогда слишком много файлов - это вообще-то должны загружаться описания для книг), а, например, с 3 по 5ую, для другого итема - с 5 по 7. Как это реализовать?


 
Джо ©   (2005-12-18 03:06) [1]

Вам повезло -  сегодня производится предновогодняя раздача уцененного кода.
----
Объявляем два формальных типа данных.

 TIntArray = array of Integer;

 TFileRecord = record
   FileName: string;
   StringNumbers: TIntArray;
 end;

Заводим две вспомогательные формальные функции:

function Integers (Arr: array of Integer): TIntArray;
var
 I: Integer;
begin
 SetLength (Result, Length(Arr));
 for I := 0 to High (Arr) do
   Result[I] := Arr[I];
end;

function FileRec (FileName: string;
 StrNumbers: array of Integer): TFileRecord;
begin
 Result.FileName := FileName;
 Result.StringNumbers := Integers(StrNumbers)
end;

Пишем процедуру, загружающую из файла строки с указанными номерами и помещающую их в указанный экз. TStrings.
Хинт: поле для общирной оптимизации, желательно переписать с использованием хотя бы ReadLn().

procedure LoadStringsFromFile (ALines: TStrings;
 FileRec: TFileRecord);
var
 TmpList: TStrings;
 I: Integer;
begin
 TmpList := TStringList.Create;
 try
   TmpList.LoadFromFile(FileRec.FileName);
   for I := 0 to High (FileRec.StringNumbers) do
     ALines.Add(TmpList[I])
 finally
   TmpList.Free;
 end;
end;

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

procedure LoadStringsFromFiles (ALines: TStrings;
 FileRecords: array of TFileRecord);
var
 I: Integer;
begin
 for I := 0 to High (FileRecords) do
   LoadStringsFromFile(ALines, FileRecords[I]);
end;

Выглядит она просто, а пользоваться ей еще проще:

procedure TForm1.Button1Click(Sender: TObject);
begin
 LoadStringsFromFiles(Memo1.Lines,
   [
     FileRec ("c:\file1.txt",[1,2,5]),
     FileRec ("c:\file2.txt",[20,192])
   ]
 );
end;

Загружаем в Memo из файла file1.txt строки 1,2,5, а из файла file2.txt строки 2 и 192. Вуаля.
В качестве домашнего задания оставляется оптимизация процедуры LoadStringsFromFile  и придумывания способа задания интервалов "с...по....".



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.012 c
2-1135201319
Mischa_M
2005-12-22 00:41
2006.01.08
ProgressBar


2-1135240151
Вт
2005-12-22 11:29
2006.01.08
Виртуальный диск в памяти


1-1134038734
Black Fox
2005-12-08 13:45
2006.01.08
Delphi + Open Office


4-1131041824
spyrytus
2005-11-03 21:17
2006.01.08
Как написать драйвер с помощью DDK под WinNT ?


2-1135069562
ANB
2005-12-20 12:06
2006.01.08
Нет ли здесь ошибки ?




   Наверх