Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 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
15-1440522423
кгшзх
2015-08-25 20:07
2016.07.24
календарно космологическое


15-1443130202
Юрий
2015-09-25 00:30
2016.07.24
С днем рождения ! 25 сентября 2015 пятница


15-1444763250
DayGaykin
2015-10-13 22:07
2016.07.24
В какой момент человеку исполняется новое количество лет?


15-1442224740
voronin20
2015-09-14 12:59
2016.07.24
Файл Exchange. В системных логах приложений появляется ошибка


2-1416681305
Max
2014-11-22 21:35
2016.07.24
Как в ListView закрасить текст строки другим цветом WinApi?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский