Вот ещё вопрос:
В своей программе (сильно сказано!) я читаю ром так:
procedure TForm1.BitBtn1Click(Sender: TObject);
var
Result1: String;
S, Minus: integer;
F: File;
byteArray : array[1..2] of byte;
count : Integer;
begin
Result1 := '' ; S:=0; Minus :=0;
// С помощью стандартного диалога получаем имя файла
if not OpenDialog1.Execute then
Exit; // Пользователь отказался выбрать файл
// Пытаемся открыть файл
AssignFile(F, OpenDialog1.FileName) ;
try
Reset(F,1) ;
except
// Файл нельзя открыть:
ShowMessage('Невозможно открыть файл ' + OpenDialog1.FileName) ;
Exit;
end;
Seek(F, S);
while not EOF(F) do begin
BlockRead(F, byteArray, 1, count); //читаем файл по 1 символу
S:=S+1;//счётчик символов
if GridOriginal.Cells[(LoNibble(byteArray[1]))+1,(HiNibble(byteArray[1]))+1] <> '' then
Result1 := Result1 + GridOriginal.Cells[(LoNibble(byteArray[1]))+1,(HiNibble(byteArray[1]))+1]; //если символ есть в таблице - добавляем его в результат
if GridOriginal.Cells[(LoNibble(byteArray[1]))+1,(HiNibble(byteArray[1]))+1] <> '' then
Minus := Minus+1; //если символ есть в таблице - увеличиваем переменную Minus
if (SpinEdit2.Value < Minus+1) and (GridOriginal.Cells[(loNibble(byteArray[1]))+1,(HiNibble(byteArray[1]))+1] = '') and (Result1 <> '') then
Original.Lines.Add (inttostr(S-Minus)+' '+Result1); // Печатаем результат если последовательность символов, которые есть в таблице, закончилась
if GridOriginal.Cells[(LoNibble(byteArray[1]))+1,(HiNibble(byteArray[1]))+1] = '' then
Result1 := ''; //обнуляем результат если прочитанного символа нет в таблице
if GridOriginal.Cells[(LoNibble(byteArray[1]))+1,(HiNibble(byteArray[1]))+1] = '' then
Minus := 0;
end;
CloseFile(F); // Закрываем файл
end;
Вот такой ужасный код - вроде он работает ;о))) С Ромами весом до 1 Мб проблем нет - но вот если файл весит 30-40 Мб, то программа работает Очень медленно... Всвязи с этим вопрос - я читаю символ из файла, потом проверяю есть ли он в моей таблице перекодировки, если есть - добавляю его в результат, проверяю следующий символ... Если он есть в таблице - добавляю его в результат, если нет его в таблице - печатаю результат, обнуляю результат и перехожу к следующему символу... А если я сначала открою весь файл, а потом уже буду выполнять операции над символами - будет ли от этого выигрыш во времени? Вообще как оптимизировать этот процесс? Как сделать его быстрее?