• XSS.stack #1 – первый литературный журнал от юзеров форума

CRONOS ➤ Cronos: формулы, конвертирование, софт

Datagram

(L3) cache
Пользователь
Регистрация
02.06.2020
Сообщения
180
Реакции
327
На форуме многие занимаются конвертированием в Cronos, тема про саму программу кажется актуальной. В идеале, конечно, раздел сделать, где группировать кроносовские вопросы по темам. Пока каждый может выкладывать те формулы и решения, которые применяет сам.

Cronos – система управления базами данных. Сайт - cronos.ru, там же можно купить коммерческую версию программы и скачать пробные версии.

Последней рабочей версией, под которую в сообществе сейчас делается основное количество баз, является Cronos 5. Эту полную версию неофициально можно скачать здесь.

Документация по Cronos и формулам Cronos.

Официально доступны:

- Бета-версия Cronos 7.0.014. На сайте. Копия файла с сайта, сделанная 23.06.2020.

- Пробная версия Cronos 7.0. Справка в DOC, справка в PDF. Копии всего этого от 23.06.2020 залил сюда.

- Пробная версия Cronos 6.4. Справка в DOC, справка в PDF. Копии от 23.06.2020 залил сюда.
 
Зачем нужны формулы Cronos и как их создавать

Формулы нужны для редактирования банков данных, разбивки информации в нужном вам формате. Например, криворуким составителями csv телефон записан в бесполезном для вас виде 8.9260.1234/56. Формулой вы сможете преобразовать в нормальный номер 792601234/56.

Создание формулы в Cronos 5:

1. Открыть банк кроносе. Верхнее меню: Проектирование - Структуры банка данных - Свойства - Основные свойства - Имя (мнемокод) базы - лучше выставить кириллицей.

2. Проектирование - Структуры банка данных - Свойства - Новое, выбрать "Тип поля" - "дата", название - ввести любое, нажать "сохранить".

3. Верхнее меню: Проектирование - Структуры банка данных - Свойства - Формулы (это справа в верхней части подменю, где "Основные свойства", "Список полей" и др.) - Добавить. Там ввесли код формулы.

4. В меню ввода формулы нажать "сохранить", комментарий к формуле можете поставить любой.

5. Открываете банк, делает простой запрос (нажимаете на знак серого бинокля слева вверху). Затем жмете на кнопку выполнения запроса - синий бинокль строчкой ниже серого бинокля. Появится меню, в нем найдите кнопку "массовая коррекция" (шестая слева) и нажмите на нее.

6. В появившемся меню массовой коррекции в пункте "Формулы" выберите "пересчитывать все" и нажмите "Выполнить". Надо будет подождать, пока не кончится коррекция. Затем проверить, правильно ли впечатались даты.

7. Если все хорошо, то Верхнее меню: Проектирование - Структуры банка данных - Свойства - Формулы - Удалить.
 
Последнее редактирование:
Резюме Jobinmoscow обрабатывал длинной формулой, так как там было много битых значений от простых типа моб89051234567домтелеф74967654321 до неочевидных 234567889161234567 (это два телефона - городской и мобильный). Формула сначала оставляет только цифры, используя в качестве разделителя любой нецифровой символ. Затем группирует цифры в номера и записывает их в множественное поле.

Получился такой код. АА10 - конечное поле, куда вносим нормализованные телефоны, АА7 - исходное поле:
Код:
@o1:="000000";
@o2:="0000000";
@o3:="00000000";
@o4:="000000000";
@o5:="0000000000";
@o6:="00000000000";
@o7:="000000000000";
@o8:="0000000000000";
@o9:="00000000000000";
@o10:="00000000000000";
@o11:="000000000000000";
@o12:="0000000000000000";
@o13:="00000000000000000";
@o14:="000000000000000000";
@o15:="0000000000000000000";
@RAW :=АА7;
@RAW:=SWAP(@RAW,"/495/","495");
@RAW:=SWAP(@RAW,"/499/","499");
@RAW:=SWAP(@RAW,"/909/","909");
@RAW:=SWAP(@RAW,"/928/","928");
@RAW:=SWAP(@RAW,"/926/","926");
@RAW:=SWAP(@RAW,"/985/","985");
@RAW:=SWAP(@RAW,"/916/","916");
@DIG :="";
@DLINA :=LEN(@RAW);
@COUNT :=0;
WHILE(@COUNT<@DLINA) DO
(
@COUNT:= @COUNT + 1;
@PEREBOR:=SUBSTR (@RAW,@COUNT,1)
IF @PEREBOR =" "|NUM (@PEREBOR)=1 
THEN @DIG := @DIG<<@PEREBOR
ELSE @DIG:=@DIG<<" "
);
@str:=TRIM(@DIG)

@mas:=convert(@str," ",_fm<<_fm<<_fm)
@cnt:=VALCOUNT(@mas);
WHILE(@cnt>0) DO
[
    @len:=LEN(@mas(@cnt));
@os:="";
WHILE(@len>0) DO
[
    @curs:=SUBSTR(@mas(@cnt),@len,1);
    if (SEQ(@curs)>47) & (SEQ(@curs)<58) then [@os:=@curs<<@os];
    @len:=@len-1;
]
    @znak1:=substr(@os,1,1);
    @znak2:=substr(@os,2,1);
    @znak3:=substr(@os,3,1);
   @znak8:=substr(@os,8,1); // ТОЛЬКО ДЛЯ ЭТОЙ БАЗЫ
    @znak11:=substr(@os,11,1)
    @znak12:=substr(@os,12,1)
    @znak123:=substr(@os,1,3); // ТОЛЬКО ДЛЯ ЭТОЙ БАЗЫ
    @ost2:=substr(@os,2,100);
    @ost3:=substr(@os,3,100);
   @ost8plus:=substr(@os,9,100); // ТОЛЬКО ДЛЯ ЭТОЙ БАЗЫ
   @ost8minus:=substr(@os,1,7); // ТОЛЬКО ДЛЯ ЭТОЙ БАЗЫ
    @ost11plus:=substr(@os,13,10); // ТОЛЬКО ДЛЯ ЭТОЙ БАЗЫ
    @ost11minus:=substr(@os,1,10); // ТОЛЬКО ДЛЯ ЭТОЙ БАЗЫ
    @ost12minus:=substr(@os,2,10); // ТОЛЬКО ДЛЯ ЭТОЙ БАЗЫ   
    @ost12plus:=substr(@os,13,10); // ТОЛЬКО ДЛЯ ЭТОЙ БАЗЫ
    @len2:=LEN(@os);
    IF ((@len2>11) & (@znak1="0") & (@znak2="0")) THEN (@os:=@ost3); // если от 13 символов и более и первые два нуля, то удалить оба этих нуля. Пример 00380671234567 => 380671234567
    IF ((@len2>11) & (@znak1="0") & (@znak2 # "0")) THEN (@os:=@ost2); // если от 13 символов и более и первый ноль, то удалить этот ноль. Пример 0380671234567 => 380671234567
    IF ((@len2=11) & (@znak1="0")) THEN (@os:=@ost2); // ПРИМЕНЯТЬ ОСТОРОЖНО, ТАК КАК ИНОСТРАННЫЕ ТЕЛЕФОНЫ МОЖЕТ ПЕРЕДЕЛЫВАТЬ В РОССИЙСКИЕ В 7. если 11 знаков и первый символ 0, то удалить его. Пример 09161234567 =>  09161234567
    IF ((@len2=11) & (@znak1="8") & (@znak2="9"|"3")) THEN (@os:="7"<<@ost2); // если 11 знаков, первый символ 8, второй 9 или 3, то менять первую 8 на 7. Так как в мире нет телефонов на +89 или +83 а в России все мобильные на 9 и много региональных кодов на 3
    IF ((@len2>10) & (@znak1="9") & (@znak2="9")) THEN (@os:="7"<<@ost2); // ТОЛЬКО В ЭТОЙ БАЗЕ если 11 и более знаков и первые символы 99, то вместо них 79. Это баг конкретной базы, в других надо смотреть чаще всего это не надо
   IF ((@len2=10) & ((@znak123="495")|(@znak123="812")|(@znak123="499"))) THEN (@os:="7"<<@os); если 10 символов и первые 495, 499 или 812 - прописать 7 в начало. 4951234567=>74951234567
    IF (@len2>5) & ((@os # @o1)|(@os # @o2)|(@os # @o3)|(@os # @o4)|(@os # @o5)|(@os # @o6)|(@os # @o7)|(@os # @o8)|(@os # @o9)|(@os # @o10)|(@os # @o11)|(@os # @o12)|(@os # @o13)|(@os # @o14)|(@os # @o15)) THEN АА10(@cnt):=@os;
   IF ((@len2=18) & (@znak8="8")) THEN ((АА10(1):=@ost8minus) & (АА10(2):="7"<<@ost8plus)); // ТОЛЬКО В ЭТОЙ БАЗЕ. 495123456789161234567 => 74951234567; 79161234567
    IF ((@len2=21) & (@znak11="8")) THEN ((АА10(1):="7"<<@ost11minus) & (АА10(2):="7"<<@ost11plus));// ТОЛЬКО ДЛЯ ЭТОЙ БАЗЫ 495123456789161234567=>74951234567;79161234567
    IF ((@len2=22) & (@znak12="7")) THEN ((АА10(1):=@ost11minus<<@znak11) & (АА10(2):="7"<<@ost11plus));// ТОЛЬКО ДЛЯ ЭТОЙ БАЗЫ 7495123456779161234567=>7495123456;79161234567
    IF ((@len2=22) & (@znak12="8")) THEN ((АА10(1):="7"<<@ost12minus) & (АА10(2):="7"<<@ost12plus));// ТОЛЬКО ДЛЯ ЭТОЙ БАЗЫ 7495123456789161234567 млм 8495123456789161234567 => 74951234567;79161234567
@cnt:=@cnt-1
]
 
Последнее редактирование:
Есть более простая формула, которая гарантированно позволяет не потерять ни одного телефона, как бы плохо их не писали в исходниках. Код ниже оставляет в строке только цифры и записывает их подряд. Если вводите в поиск *9160123456*, то найдете это в записи с 88495123456791601234562225503.

Код:
@RAW :=АВ8; //указываем исходное поле
@DIG :=""; //обнуляем переменную
@DLINA :=LEN(@RAW); //получаеm цифру количества знаков в значении исходного поля
@COUNT :=0; //счетчик равен нулю
WHILE(@COUNT<@DLINA) DO  //пока счетчик меньше количества символов в строке выше, делать операции ниже
(
@COUNT:= @COUNT + 1; //счетчик плюс 1
@PEREBOR:=SUBSTR (@RAW,@COUNT,1) //выбираем символ в строке, чей номер от нуля совпадает в цифрой счетчика массива
IF NUM (@PEREBOR)=1  THEN @DIG := @DIG<<@PEREBOR //если это символ цифра, то записать его в итоговую переменную
);
АВ13 :=@DIG //записать результат в конечное поле
 
Последнее редактирование:
В версиях выше 6 есть поддержка регулярных выражений в массовой коррекции. Регулярными выражениями можно пользоваться и в продвинутых текстовых редакторах, в частности в EmEditor. Мне кажется это практичней.
Ну а формула, да, хорошая формула, только всех DEF-кодов не учесть, да и оно решая часть проблем может добавлять новые...
 
Как удалять дубли записей сигнатурами

Часто в базе есть записи, которые либо не отличаются воообще, либо отключаются значением в одном-двух полях. Их надо удалить, что делается либо идентификацией, либо через создание нового поля сигнатур. Идентификация в Cronos работает нормально, начиная с версии 6.4.

Отсюда решения два.

Первое. Взять демо-версию Cronos 6.4, открыть в ней ваш банк, удалить дубли идентификацией (смотрите в справке по кроносу, как делать идентификацию, там все просто).

Второе. Если у вас Cronos 5 и ниже, то:

1) Создать новое поле, допустим А16

2) Выбрать ключевые поля (можно даже все), при совпадении которых запись признается дублем и уходит в удаление.

3) Допустим, ключевые поля AA3, AA4, AA6, AA7, AA8, AA13, AA15. Тогда формула (как делать формулы и что такое массовая корреция - читать здесь):

AA16:=""
AA16 := getsignature(AA3)<<getsignature(AA4)<<getsignature(AA6)<<getsignature(AA7)<<getsignature(AA8)<<getsignature(AA13)<<getsignature(AA15)

4) Сделать массовую коррекцию, вручную отсмотреть несколько дублей и значения в поле А16, чтобы они совпадали у дублей. Затем Проектирование / Структуры банка данных / Свойства / Идентификация. Там:
- Набор - новый, выбрать ТОЛЬКО поле сигнатур
- Тип идентификации - "Слияние при совпадении ключа" (если это при копировании записей из банка в банк, то можно выбрать "Отстранение при совпадении ключа", но не при кореекции одного банка)

5) Сделать массовую коррекцию, загалчив в массовой коррекции пункт "идентификация", формулы можно не пересчитывать.

Сигнатуры вам пригодятся для связей. Например, у вас база клиентов компании с полями ФИО и email. У некоторых клиентов общая почта, и вам в записи на каждого клиента видеть ссылки на других клиентов с тем же email. Вы создаете связи по полю, но Cronos при построении связей с буквенными значениями иногда лажает - и принимает майлы типа ivanova@yandex.ru и ivanov_@yandex.ru за один майл. Вы создаете сигнатуру, и строите связь по ней. Это исключает такие ошибки.
 
Последнее редактирование:
Тема однозначно нужная, не так много проблем в конвертации, можно собрать всё в кучу отточив формулы до универсальных.
НО в данном вопросе нужно понимать, что проблема остаётся в отсутствии стандарта выходных данных.
Например я в свои конверты собираю поле телефона без начальной 7\8 для России. Это гораздо проще приводить как по мне, мы имеем меньшее поле (меньший вес файла) у нас ничего не теряется. Добавить по вкусу потом 7 +7 или 8 для каких то задач - никаких проблем.

Зачем нужна эта первая цифра, если она не несёт никакой пользы а конвертировать её сложнее чем удалить?
Предлагаю дискуссию по этой и остальным подобным вопросам, если добиться единого выходного стандарта жить всем станет проще, учитывая что форум собирается стать лидером по данной тематике мы можем сформировать тренд.
 
я в свои конверты собираю поле телефона без начальной 7\8 для России. Это гораздо проще
До недавнего времени делал точно также. Но баз и людей в базах стало много. В больших банках по любой стране сейчас малореально полное отсутствие иностранных (к этой стране) телефонов. Так что понял, что телефон должен быть записан в поном международной формате, иначе идентификатор может получиться некорректным.
 
Последнее редактирование:
До недавнего времени делал точно также. Но баз и людей в базах стало много. В больших банках по любой стране сейчас малореально полное отсутствие иностранных (к этой стране) телефонов. Так что понял, что телефон для нормальной связи должен быть записан в поном международной формате, иначе идентификатор может получиться некорректным.
Так нет никаких других телефонов попадающих под регулярку (9[0-9]{9}). Это в любом случае уникальный идентификатор. Тоесть всё что попадает под 89[0-9]{9} 79[0-9]{9} можно смело усекать и формат будет универсальным. "+" удаляются сразу же, если поле слилось при удалении всяких точек и слешей и получилось 8911111111179222222222 то оно тоже легко режется на 2 телефона по длинне.
Зачем нужен международный формат, если телефон всё равно будет прогоняться на ГП по 9222222222 или по *9222222222, не лучше ли сделать это основным форматом
 
Дело в том, что существует огромное кол-во банков, которые выправить не представляется возможным практически. Привести номера телефонов к единому виду. Это слишком долго, проект в котором невозможно даже просчитать время на полное исправление всего и вся.
Организация банков участвующих в глобальном поиске у каждого так же различна, хотя безусловно, с регулярками в Кроносе это правится легко и просто (^ - добавить в начало записи поля, или же ^.{1} - удалить первую цифру начала записи в поле). Так что практически эту идею воплотить невозможно. Вы не сможете всех убедить и заставить делать так, или эдак. То же касается организации стандартов конвертов в Кронос, например сводить ли ФИО в одно поле, или оставлять в трех. Лично я делаю в одном поле ФИО, это не канонически и я прекрасно понимаю разницу, но выбор мой обусловлен банальным просчетом, кол-во таблиц данных в которых ФИО в трех полях в разы меньше, нежели значения ФИО в одном поле. Ну и конкатенация, склейка значительно быстрее и проще, нежели сепарирование, разнесение значений. Если это 1, 10 банков то пустяки, если же прикинуть работу, внимание в течении скажем года коллекционирования то это суммируется в дни работы, даже не часы.
Так что...

Тема однозначно нужная, не так много проблем в конвертации, можно собрать всё в кучу отточив формулы до универсальных.
НО в данном вопросе нужно понимать, что проблема остаётся в отсутствии стандарта выходных данных.
Например я в свои конверты собираю поле телефона без начальной 7\8 для России. Это гораздо проще приводить как по мне, мы имеем меньшее поле (меньший вес файла) у нас ничего не теряется. Добавить по вкусу потом 7 +7 или 8 для каких то задач - никаких проблем.

Зачем нужна эта первая цифра, если она не несёт никакой пользы а конвертировать её сложнее чем удалить?
Предлагаю дискуссию по этой и остальным подобным вопросам, если добиться единого выходного стандарта жить всем станет проще, учитывая что форум собирается стать лидером по данной тематике мы можем сформировать тренд.
 
На форуме многие занимаются конвертированием в Cronos, тема про саму программу кажется актуальной. В идеале, конечно, раздел сделать, где группировать кроносовские вопросы по темам. Пока каждый может выкладывать те формулы и решения, которые применяет сам.

Cronos – система управления базами данных. Сайт - cronos.ru, там же можно купить коммерческую версию программы и скачать пробные версии.

Последней рабочей версией, под которую в сообществе сейчас делается основное количество баз, является Cronos 5. Эту полную версию неофициально можно скачать здесь.

Документация по Cronos и формулам Cronos.

Официально доступны:

- Бета-версия Cronos 7.0.014. На сайте. Копия файла с сайта, сделанная 23.06.2020.

- Пробная версия Cronos 7.0. Справка в DOC, справка в PDF. Копии всего этого от 23.06.2020 залил сюда.

- Пробная версия Cronos 6.4. Справка в DOC, справка в PDF. Копии от 23.06.2020 залил сюда.
Тему могу закрепить, если хочешь. У меня была где-то тема про вообще работу с базами, с текстом, регулярками и тд, но на тот момент не пользовалась популярностью. Сейчас в твоей давай возродим "вопросник" по работе с данными, конвертирование , Кроносом и тд.
 
Тему могу закрепить, если хочешь.

Да, закреп - хорошая идея. Я не в курсе, как теперь редактировать верхний пост. В посте-шапке бы желательно тогда собирать и поддерживать:

- все линки на версии кроноса и кроса - официальные и не очень, а также текстовые программы, где делаем конверты.

- список формул, регулярок и мануалов, которые будут давать тут люди.

Просьба - пишите проще и подробнее как для дебилов. Кронос - не мейнстрим давно, многие не в теме совсем, и максимально простые и подробные описания позволят начинающим войти в тему.
 
3) Допустим, ключевые поля AA3, AA4, AA6, AA7, AA8, AA13, AA15. Тогда формула (как делать формулы и что такое массовая корреция - читать здесь):
При добавлении формулы ошибка:
"Здесь должна быть операция присваивания, скобка, метка или функции GOTO или IF" и выделяет первый знак равно - "="

Формула твоя, но с моими именами таблиц.

Если изменить "=" на GOTO, то появляется новая ошибка — "неизвестное выражение" и выделяет имя таблицы в скобках.
Даже если сделать так:
Код:
signature :=""
signature :=getsignature(name)<<getsignature(fname)<<getsignature(phone)<<getsignature(uid)<<getsignature(nik)
Всё равно "неизвестное выражение" и выделяет имя таблицы — "signature".

А в версии старше 5 банки вообще не добавляются.
 
Последнее редактирование:
Естественно ошибка. Вместо name, fname и так далее должны стоять мнемокоды с номером поля. АА5 например и так далее, а не названия полей
Я не знаю что это за чудесный синтаксис, но это можно вместить в функцию GETSIGNATURE и не парить мозг.
Код:
@id := АА1<<АА2<<АА3<<АА4;  // поля по которым вычисляем
АА5 := getsignature (@id) // поле в которое присваиваем значение сигнатуры
Хочу добавить что при вычислении сигнатуры важен как регистр, так и всякие символы в поле. Не забывайте об этом.
Так же, в меню проектирования формул есть замечательное визуальное представление структуры банка и функций, включаемых через "Вид", что значительно облегчает работу с формулами.

2020-06-24_190310.jpg


При добавлении формулы ошибка:
"Здесь должна быть операция присваивания, скобка, метка или функции GOTO или IF" и выделяет первый знак равно - "="
signature :=getsignature(name)<<getsignature(fname)<<getsignature(phone)<<getsignature(uid)<<getsignature(nik)[/CODE]
Всё равно "неизвестное выражение" и выделяет имя таблицы — "signature".

А в версии старше 5 банки вообще не добавляются.
 
Последнее редактирование:
При добавлении формулы ошибка:
"Здесь должна быть операция присваивания, скобка, метка или функции GOTO или IF" и выделяет первый знак равно - "="

У меня образец формулы. Ты туда должен прописать названия твоих полей по мнемокоду твоей базы. Посмотри пункт 1 здесь, там написано, как узнать мнемокод. Если неясно, почитай описание структуры кроносовских банков (в шапке есть ссылки).
 
Спасибо, сигнатуры нормально прописало, но при идентификации зависло на "обработано 1", хотя процессор грузит на 22%, но ничего не происходит. Ждать дальше?

upd: за 40 минут всего 4 обработано и исправлено… это норм? я читал, что в телеговской базе 7 млн дублей.

И ещё вопрос, как можно отобрать все записи с определённым числом (например начинающимся на 989, в базе телеграма), чтобы потом их удалить?

Например создать колонку "иран" и добавить в эту колонку для этих 989* номеров какое-то уникальное значение, чтобы потом можно было сразу найти и удалить их. Но как это сделать — неизвестно.
 
Последнее редактирование:
как можно отобрать все записи с определённым числом (например начинающимся на 989, в базе телеграма), чтобы потом их удалить?

Это можно без формул сделать, руками.

1) открой нужный банк, ткни в картинку с карандашом правее двух биноклей.

2) "Показывать существующие записи?" Да

3) В появившихся полях ткни в шапку поля с телефонами

4) "Начать сортировку?" Да

5) Отмотай на начало телефонов на 989, найди первый такой телефон, нажми shift и мышкой ткни в первый слева (пустой) квадрат записи. В квадрате появится красная галка. Не отпуская шифта, отмотай в конец записей на 989 и точно также ткни в последнюю запись, которую хочешь удалить.

6) Нажми картинку "удалить запись" (красный крест на белом фоне) в верхнем меню

7) Подтверди удаление.
 
Это можно без формул сделать, руками.

1) открой нужный банк, ткни в картинку с карандашом правее двух биноклей.

2) "Показывать существующие записи?" Да

3) В появившихся полях ткни в шапку поля с телефонами

4) "Начать сортировку?" Да

5) Отмотай на начало телефонов на 989, найди первый такой телефон, нажми shift и мышкой ткни в первый слева (пустой) квадрат записи. В квадрате появится красная галка. Не отпуская шифта, отмотай в конец записей на 989 и точно также ткни в последнюю запись, которую хочешь удалить.

6) Нажми картинку "удалить запись" (красный крест на белом фоне) в верхнем меню

7) Подтверди удаление.
Я смотрю ты любишь посложнее )

В поиск (F3) 989* - выполняем
Коррекция (cltr + E)
Галка в левом верхнем углу отметит сразу все выбранные записи
Крестик в меню (Clrt + D) - удаляем все отмеченные
 
Последнее редактирование:
Как бесплатно установить портабельный EmEditor

Этот софт необходим для редактирования гигабайтных текстовых файлов

1) Открыть emeditor.com
2) Посмотреть в разделе recent news, какая версия сейчас последняя.
3) Взять ссылку files.emeditor.com/emed64_19.9.2_portable.zip, проставить в нее номер версии (вместо 19.9.2) и скачать
4) Скачать кейген https://www.upload.ee/files/8318786/emeditor_17.5_crack.7z.html (либо https://multifilemirror.com/1x3ui5kmnfrp/addhaloka.rar.html)
5) Отключить интернет, запустить прогамму, запустить кейген, ввести ключ, имя можно не вводить, запустить интернет

В портабельной версии отключены обновления, так что надо вручную переставлять. Это большой плюс, так как EE использует обновления, чтобы банить бесплатные регистрации.
 
Последнее редактирование:


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх