Главная страница
    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.45 MB
Время: 0.007 c
2-1135183024
Mizanthrope
2005-12-21 19:37
2006.01.08
Пересчитать количество секунд в чч:мм:сс


14-1134454357
WondeRu
2005-12-13 09:12
2006.01.08
Какого самого прикольного Деда Мороза вы видели?


2-1134835627
dude
2005-12-17 19:07
2006.01.08
we56er это имя?


2-1135158971
Dmitrij_K
2005-12-21 12:56
2006.01.08
MS Word


2-1134853068
Scripl
2005-12-17 23:57
2006.01.08
Ссылка





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский