Замечания и предложения


#1537

Конкретнее выражайтесь, это ничего не говорит.

И - та функция всё равно дубль, оригиналы всех для работы с путями к файлам - в классе System.IO.Path.


#1538

Наверное вы её неправильно использовали


#1539

Вот к примеру небольшой код, использующий стороннюю библиотеку для распаковки архива. Исходник лежит в папке с игрой Skyrim.

{$reference 'SharpCompress.dll'}
uses SharpCompress, SharpCompress.Archives;
begin
  try
    var archive: SharpCompress.Archives.IArchive := SharpCompress.Archives.ArchiveFactory.Open(ExtractFilePath(GetEXEFileName) + 'Skyrim\Updates\Enhanced_Blood_Textures_LITE.rar', nil);
    var EO := new SharpCompress.Common.ExtractionOptions;
    EO.ExtractFullPath := true;
    EO.Overwrite := true;
    foreach var entry in archive.Entries do
      if not entry.IsDirectory then entry.WriteToDirectory(ExtractFilePath(GetEXEFileName) + 'Mod Organizer\mods\', EO);
  except
    on System.DivideByZeroException do 
      writeln('Деление на 0');
    on e: System.IndexOutOfRangeException do
      writeln(e.Message);
    on System.FormatException do
      writeln('Неверный формат ввода');
  else writeln('Какое-то другое исключение');
  end;
end.

Если в настройках не отрубить функцию “Выходные файлы генерировать в директорию такую-то”, то программа будет сыпать ошибку:

Ошибка времени выполнения: System.IO.FileNotFoundException: Не удалось загрузить файл или сборку “SharpCompress, Version=0.23.0.0, Culture=neutral, PublicKeyToken=afb0a02973931d96” либо одну из их зависимостей. Не удается найти указанный файл. Стек: в 1.Program.$Main() в 1.Program.Main()


#1540

По моему уже был разговор про это здесь. Но разработчики то ли не прочитали, то ли проигнорили… В общем сделал issue, теперь точно заметят:


#1541

Не помню, предлагалось уже или нет…

function ToDigits(self: integer): sequence of integer; extensionmethod;
begin
  if self<0 then
    if self=integer.MinValue then
    begin
      yield 2;
      self := 147483648;
    end else
      self := -self;
  
  var d := 1;
  var m := self div 10;
  while d<=m do d *= 10;
  
  while d <> 0 do
  begin
    yield System.Math.DivRem(self,d,self);
    d := d div 10;
  end;
  
end;

begin
  (12345).ToDigits.Println;
  (10000).ToDigits.Println;
  integer.MaxValue.ToDigits.Println;
  (-12345).ToDigits.Println;
  integer.MinValue.ToDigits.Println;
end.

(ну и по аналогии с int64 и может BigInteger)

Подтолкнуло написать это: http://www.cyberforum.ru/pascalabc-net/thread2551911.html#post14087426


#1542

Предложение однозначно хорошее, на мой взгляд, поэтому: