diff --git a/README.md b/README.md
new file mode 100644
index 0000000..55a1358
--- /dev/null
+++ b/README.md
@@ -0,0 +1,10 @@
+# anbsoftware_componentspack
+some classes that extend the capabilities of the C # language
+
+# Welcome to ANB Software Components Pack!
+
+You are on the component set «ANB» page. Thanks for your interest in the project
+
+# License
+
+MIIT
diff --git a/anbs_cp/CountFormatter.cs b/anbs_cp/CountFormatter.cs
new file mode 100644
index 0000000..05bba3a
--- /dev/null
+++ b/anbs_cp/CountFormatter.cs
@@ -0,0 +1,34 @@
+namespace anbs_cp
+{
+ ///
+ /// Форматирует число элементов в понятную строку
+ ///
+ public class CountFormatter : IValueFormatter
+ {
+ #region Cвойства класса
+ ///
+ /// Имена чисел (тысяч, миллионов, миллиардов и т.п.)
+ ///
+ public string[] CountNames { get; set; } = { "", "тыс.", "млн.", "млрд." };
+ ///
+ /// Знаков после запятой
+ ///
+ public byte DecimalPlaces { get; set; } = 1;
+ ///
+ /// Делители чисел
+ ///
+ public long[] Delimeters { get; set; } = { 1000, 1000000, 1000000000 };
+ #endregion
+
+ #region Реализация интерфейса
+ ///
+ /// Реализация интерфейса
+ ///
+ public string[] ValueNames { get => CountNames; set => CountNames = value; }
+ ///
+ /// Реализация интерфейса
+ ///
+ public long[] MaxSizes { get => Delimeters; set => Delimeters = value; }
+ #endregion
+ }
+}
\ No newline at end of file
diff --git a/anbs_cp/FileSizeFormatter.cs b/anbs_cp/FileSizeFormatter.cs
new file mode 100644
index 0000000..a4cbd33
--- /dev/null
+++ b/anbs_cp/FileSizeFormatter.cs
@@ -0,0 +1,56 @@
+namespace anbs_cp
+{
+ ///
+ /// Форматирует размер файла/папки в понятную строку
+ ///
+ public class FileSizeFormatter : IValueFormatter
+ {
+ #region Cвойства класса
+ ///
+ /// Имена размеров (байт, килобайт, мегабайт, гигабайт и террабайт)
+ ///
+ public string[] SizeNames { get; set; } = { "Байт", "Кб", "Мб", "Гб", "Тб" };
+ ///
+ /// Знаков после запятой
+ ///
+ public byte DecimalPlaces { get; set; } = 2;
+ ///
+ /// Максимально байт (далее идут Кбайты)
+ ///
+ public long ByteMax { get; set; } = 1024;
+ ///
+ /// Максимально Кбайт (далее идут Мбайты)
+ ///
+ public long KByteMax { get; set; } = 1048576;
+ ///
+ /// Максимально Мбайт (далее идут Гбайты)
+ ///
+ public long MByteMax { get; set; } = 1073741824;
+ ///
+ /// Максимально Гбайт (далее идут Тбайты)
+ ///
+ public long GByteMax { get; set; } = 1099511627776;
+ #endregion
+
+ #region Реализация интерфейса
+ ///
+ /// Реализация интерфейса
+ ///
+ public string[] ValueNames { get => SizeNames; set => SizeNames = value; }
+ ///
+ /// Реализация интерфейса
+ ///
+ public long[] MaxSizes
+ {
+ get => new long[] { ByteMax, KByteMax, MByteMax, GByteMax };
+ set
+ {
+ ByteMax = value[0];
+ KByteMax = value[1];
+ MByteMax = value[2];
+ GByteMax = value[3];
+ }
+ }
+ #endregion
+ }
+}
\ No newline at end of file
diff --git a/anbs_cp/IValueFormatter.cs b/anbs_cp/IValueFormatter.cs
new file mode 100644
index 0000000..36e0d3b
--- /dev/null
+++ b/anbs_cp/IValueFormatter.cs
@@ -0,0 +1,82 @@
+namespace anbs_cp
+{
+ ///
+ /// Форматирует размерности в понятную строку
+ ///
+ public interface IValueFormatter
+ {
+
+ #region Определения интерфейса
+ ///
+ /// Имена размерностей
+ ///
+ public string[] ValueNames { get; set; }
+ ///
+ /// Знаков после запятой
+ ///
+ public byte DecimalPlaces { get; set; }
+ ///
+ /// Максимальные размеры (массив ulong[4])
+ ///
+ public long[] MaxSizes { get; set; }
+ #endregion
+
+ #region Методы интерфейса
+ ///
+ /// Форматирование размерности
+ ///
+ /// Размерность, требующая форматирования
+ /// Форматированная размерность (например, 20 Мб)
+ public string Format(long value)
+ {
+ //Левая граница
+ long leftnum;
+ //Правая граница
+ long rightnum;
+
+ for (int i = 0; i <= MaxSizes.Length; i++)
+ {
+ if (i == 0)
+ leftnum = 0;
+ else
+ leftnum = MaxSizes[i - 1];
+
+ if (i == MaxSizes.Length)
+ rightnum = long.MaxValue;
+ else
+ rightnum = MaxSizes[i];
+
+ if ((value >= leftnum) && (value < rightnum))
+ return $"{FormatValue(value, leftnum)} {ValueNames[i]}";
+
+ }
+
+ return value.ToString();
+ }
+ ///
+ /// Деление числа на число с DecimalPlaces знаками после запятой
+ ///
+ /// Делимое число
+ /// Число-делитель
+ /// Частное (с DecimalPlaces знаками после запятой)
+ private string FormatValue(long dividend, long divider)
+ {
+ if (divider == 0)
+ {
+ return $"{dividend}";
+ }
+
+ long delim = 1;
+
+ for (int i = 0; i <= DecimalPlaces; i++)
+ {
+ delim *= 10;
+ }
+
+ decimal value = Math.Round((decimal)(dividend * delim / divider)) / delim;
+
+ return $"{value}";
+ }
+ #endregion
+ }
+}
\ No newline at end of file
diff --git a/anbs_cp/LikeDelphi.cs b/anbs_cp/LikeDelphi.cs
index 9103027..bf6831d 100644
--- a/anbs_cp/LikeDelphi.cs
+++ b/anbs_cp/LikeDelphi.cs
@@ -1,23 +1,48 @@
-using System;
-using System.Collections.Generic;
-using System.Text;
-
+using System.Collections.Generic;
namespace anbs_cp
{
- public class LikeDelphi
+ ///
+ /// Класс, добавляющий реализацию некоторых методов Delphi, которые упрощают работу в C#.
+ ///
+ public static class LikeDelphi
{
- /*
- * Аналог функции "IncludeTrailingBackslash
- */
- public static string IncludeTrailingBackslash(string Path)
+ ///
+ /// Аналог функции IncludeTrailingBackslash
+ ///
+ /// Путь, к которому нужно добавить slash
+ /// Путь со slash в конце
+ public static string IncludeTrailingBackslash(string path)
{
- string result = Path;
- int Index = Path.Length - 1;
- if (Path[Index] != '\\')
+ string result = path;
+ int Index = path.Length - 1;
+ if (path[Index] != '\\')
{
- result = $"{Path}\\";
+ result = $"{path}\\";
}
return result;
}
+ ///
+ /// Парсер строки в множество строк
+ ///
+ /// Строка, которую нужно разбить
+ /// Символ-делитель строки
+ /// Массив строк
+ public static List ParseString(string astring, char delim)
+ {
+ int from = -1;
+ int to;
+ List result = new();
+ do
+ {
+ from++;
+ to = astring.IndexOf(delim, from);
+ if (to <= 0)
+ to = astring.Length;
+ if (from != to)
+ result.Add(astring[from..(to-from)]);
+ from = to;
+ } while (to != astring.Length);
+ return result;
+ }
}
-}
+}
\ No newline at end of file
diff --git a/anbs_cp/TStringList.cs b/anbs_cp/TStringList.cs
deleted file mode 100644
index 596556d..0000000
--- a/anbs_cp/TStringList.cs
+++ /dev/null
@@ -1,164 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.IO;
-
-namespace anbs_componentspack
-{
- public enum TStringListType
- {
- sltStringsOnly, //Только строки -- сортировка по строкам включена, имеющиеся объекты удалит
- sltObjectsOnly, //Только объекты -- сортировка по объектам включена
- sltBoth //И строки, и объекты -- сортировка отключена
- }
- public class TStringList
- {
- private List FLines;
- private List