Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.01.08;
Скачать: 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 вся ветка

Текущий архив: 2006.01.08;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.038 c
14-1134406251
TStas
2005-12-12 19:50
2006.01.08
Как адресуются огромные файлы?


4-1131174643
Soler
2005-11-05 10:10
2006.01.08
Добавить текст в edit


2-1134580039
гость2
2005-12-14 20:07
2006.01.08
Определить открыто ли popup меню


14-1134644811
iamdanil
2005-12-15 14:06
2006.01.08
Delphi 2005


2-1134920031
Out84
2005-12-18 18:33
2006.01.08
Поправка работы с ini файлами