Нижеприведенный кусок кода работает чрезвычайно медленно, например, если lData 6 MB, то процедура занимаетс порядка 5ти минут. Есть ли альтернативный скоростной вариант?
const
MAX_LINE_LENGTH = 64;
...
P := MAX_LINE_LENGTH + 1;
while P <= Length(lData) do begin
Insert(EOL, lData, P);
P := P + MAX_LINE_LENGTH + 2;
end;
Здравствуйте, cargo, Вы писали:
C>Нижеприведенный кусок кода работает чрезвычайно медленно, например, если lData 6 MB, то процедура занимаетс порядка 5ти минут. Есть ли альтернативный скоростной вариант?
C>C>const
C> MAX_LINE_LENGTH = 64;
C>...
C> P := MAX_LINE_LENGTH + 1;
C> while P <= Length(lData) do begin
C> Insert(EOL, lData, P);
C> P := P + MAX_LINE_LENGTH + 2;
C> end;
C>
Конечно есть, но как и все скоростное оно побольше
Я думаю эта процедура просто промчится, у меня это милисекунда
function SetEOL(aData: string): string;
const
MAX_LINE_LENGTH = 64;
EOL = #13#10;
var
aNewData : string;
aNewDataSize : Integer;
P, NewP : PChar;
aDataLength : Integer;
aLineLen : Integer;
begin
aDataLength := Length (aData);
aNewDataSize := aDataLength + ((aDataLength - 1) div MAX_LINE_LENGTH) * Length (EOL);
SetLength (aNewData, aNewDataSize);
P := PChar (aData);
NewP := PChar (aNewData);
while aDataLength > 0 do begin
aLineLen := Min (aDataLength, MAX_LINE_LENGTH);
Move (P^, NewP^, aLineLen);
Dec (aDataLength, aLineLen);
Inc (P, aLineLen);
Inc (NewP, aLineLen);
if aDataLength > 0 then begin
Move (EOL, NewP^, Length (EOL));
Inc (NewP, Length (EOL));
end;
end;
Result := aNewData;
end;
Здравствуйте, Danchik, Вы писали:
D>Конечно есть, но как и все скоростное оно побольше
D>Я думаю эта процедура просто промчится, у меня это милисекунда
Ого!