Текущий архив: 2006.02.05;
Скачать: CL | DM;
Вниз
Ускорение процесса добавления текста в TStrings Найти похожие ветки
← →
Virtukon (2006-01-17 18:40) [0]Есть несколько кусков текста в разных TStrings. Необходимо объединить их в одном TStrings. Когда текст имеет размер порядка 1 метра процесс объединения растягивается на довольно длительное время... А у меня есть необходимость оперировать и с 10 метровыми текстами. Что нибудь здесь можно предпринять? Есть советы? Как оптимальнее всего объединить эти тексты?
← →
Джо © (2006-01-17 19:01) [1]10 Мб текста — это пустяки.
Покажи, как ты с ним работаешь.
← →
Virtukon (2006-01-17 19:13) [2]к примеру:
var
strlist1, strlist2, strlist3: TStrings;
begin
strlist1:=TStringList.Create;
strlist2:=TStringList.Create;
strlist3:=TStringList.Create;
strlist1.loadfromfile("filename1");
strlist2.loadfromfile("filename2");
strlist3.append(strlist1.text);
strlist3.append(strlist2.text);
strlist1.free;
strlist2.free;
strlist3.free;
end;
← →
Джо © (2006-01-17 19:20) [3]Используй
StrList3.AddStrings (StrList1);
StrList3.AddStrings (StrList2);
Или такую схему с TMemoryStrem:
procedure TForm1.Button1Click(Sender: TObject);
var
List1,
List2,
List3: TStrings;
Stream: TMemoryStream;
begin
Screen.Cursor := crHourGlass;
try
List1 := TStringList.Create;
try
List2 := TStringList.Create;
try
//List1.LoadFromFile("d:\1.txt"); // 10 Mb
//List2.LoadFromFile("d:\2.txt"); // 10 Mb
List3 := TStringList.Create;
try
Stream := TMemoryStream.Create;
try
// сбрасываем все в стрим
List1.SaveToStream (Stream);
List2.SaveToStream (Stream);
Stream.Position := 0;
// читаем из стрима
List3.LoadFromStream (Stream);
//List3.SaveToFile("d:\3.txt");
finally
Stream.Free;
end;
finally
List3.Free;
end;
finally
List2.Free;
end;
finally
List1.Free;
end;
finally
Screen.Cursor := crDefault;
end
end;
← →
Джо © (2006-01-17 19:30) [4]Для упрощения вызовов можно сделать такие две процедуры, потестируй, что быстрее выходит:
procedure AppendStrings (Dest: TStrings; Source: array of TStrings);
var
I: Integer;
begin
for I := Low (Source) to High (Source) do
Dest.AddStrings(Source[I]);
end;
procedure ReplaceStrings (Dest: TStrings; Source: array of TStrings);
var
I: Integer;
Stream: TMemoryStream;
begin
Stream := TMemoryStream.Create;
try
for I := Low (Source) to High (Source) do
Source[I].SaveToStream(Stream);
Stream.Position := 0;
Dest.LoadFromStream(Stream);
finally
Stream.Free;
end
end;
Вызов по схеме:
AppendStrings (StrList3, [StrList1,StrList2]);
Страницы: 1 вся ветка
Текущий архив: 2006.02.05;
Скачать: CL | DM;
Память: 0.48 MB
Время: 0.025 c