Форум: "Прочее";
Текущий архив: 2016.07.24;
Скачать: [xml.tar.bz2];
Внизнужно быстро отсечь "хвост" массива чисел Найти похожие ветки
← →
ВладОшин © (2015-10-09 16:15) [0]Есть массив (из файла) целых чисел, значения разные, но под конец идут близкие к 0. Нужно их отсечь. Т.е. сделать другой массив, короче.
Надо максимально быстро по скорости выполнения
например:
1,2,3,435,456,322,0,1,348,735,12,10, 0,1
отсюда нужно откусить
435,456,322,0,1,348,735
т.к. далее(справа) 12,10, 0,1 - числа меньше допуска (близкие к 0)
в середине есть тоже такие, но от них справа есть большие. Надо только хвост из мелких
(слева 1,2,3, - это не надо, оно стандартно)
написал простоfunction TForm1.FileAsBS2(FN: string): string;
var
FS: TFileStream;
Eps: SmallInt ;
VInt: SmallInt;
FromLeft, FromRight, LenAll, CurLen: LongInt;
i: LongInt;
begin
Result := "";
FromLeft := GetCutFromLeft(FN);
FS := TFileStream.Create(FN, fmOpenRead);
LenAll := FS.Size;
CurLen := 0;
Eps := 100;
for i := 0 to LenAll div 2 - 2 do // можно и - 100, последние 300-400 всегда меньше допуска
begin
FS.Seek(i*2, soFromBeginning);
FS.Read(VInt,2);
if VInt > Eps then
CurLen := i*2;
end;
FreeAndNil(FS);
FromRight := LenAll - CurLen;
// далее просто середина файла переписывается в другой
CutFromFileAndSaveAs(FN, FromLeft, FromRight, FN+"-new");
end;
быстрее можно?
← →
DayGaykin © (2015-10-09 16:57) [1]try finally забыл:)
Если читать блоками (по 4-256 Кб) с конца и проверять блок на наличие больших чисел, то получится быстрее, чем читать по SizeOf(SmallInt) байта. Весь хвост прочитать в любом случае придется.
← →
ВладОшин © (2015-10-09 17:05) [2]точно!, с конца же!
спасибо!
← →
DayGaykin © (2015-10-09 17:07) [3]И, кстати, если существующий файл не нужен, а нужен только обрезанный, то лучше выполнить FS.Size := X, чем копировать файл.
← →
ВладОшин © (2015-10-09 17:50) [4]нужен
оба нужны
есть идея.. и я буду ее думать )
так, накидываю просто пока. Поэтому пока без try finally, блоков
надо проверить можно подменить файлы или нет ..
← →
Юрий Зотов © (2015-10-10 10:48) [5]> сделать другой массив, короче.
> максимально быстро по скорости выполнения
CopyMemory
← →
Sha © (2015-10-11 09:41) [6]> ВладОшин © (09.10.15 17:50) [4]
> нужен, оба нужны
если оба нужны, просто храни одно число - длину остатка
← →
DVM © (2015-10-11 10:07) [7]
> быстрее можно?
в этом коде самое медленное - операции с файлами, на их фоне все остальное несущественно.
← →
ВладОшин © (2015-10-15 20:16) [8]Все получилось,
Спасибо.
Скорость даже больше чем надо, простаивает )
просто храни одно число
красиво ), но не , мне нужно файл подсовывать одной программе. И новую копию ей же (во втором экземпляре запущенной)
Страницы: 1 вся ветка
Форум: "Прочее";
Текущий архив: 2016.07.24;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.005 c