Форум: "Начинающим";
Текущий архив: 2006.01.08;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.007 c