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

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

Прошу совета. Конвертирую в кронос авиабилеты 2019. Много трудностей с 40 млн записей, но вроде все проблемы удалось решить. Кроме одной. Внутри текста ряда полей есть запятые, которые путаются с запятыми, разделяющими поля. Из-за чего записи бьются и съезжают.

Три строки из исходного csv, проблемные запятые во второй строке:

PassengerDetailsID,PassengerID,ReservationID,Address1,Address2,City,County,Postcode,CountryName,Fax,Telephone,Email,EmergContact_Title,EmergContact_FirstName,EmergContact_SurName,EmergContact_Relationship,EmergContact_AreaCode,EmergContact_Telephone,IsSendSMS,BusinessContactNo
25400,46597,"OD1276468","130,Jalan Pulai Jaya 8,Bandar Pulai Jaya","","Johor Bahru","","81300","Malaysia","","","farahdyra@gmail.com","","","","","","",,
25401,46598,"OD1276469","292-f","","Kota bharu","","15200","Malaysia","","0134999880","b.show1293@gmail.com","","","","","","",,



Обычный LibreOffice умеет отличать запятые внутри поля от запятых-разделителей и видит все правильно:

u.jpg



EmEditor видит строки с ошибкой:

u.jpg




Cronos при конвертации видит с той же ошибкой, поля едут:

u.jpg


Это плохо, потому что часть имэйлов не попадают в поле email. В LibreOffice я не могу открыть файл на 7 гигабайт. Мне кажется, у EmEditor должна быть какая-то простая опция для таких случаев. Может кто-то подсказать решение?
 
Последнее редактирование:
В EmEditor измените тип разделителя в конвертере разделенных данных.
Кронос не понимает ограничители, т.е. кавычки.
2020-06-26_194424.jpg
 
Последнее редактирование:
тип разделителя в конвертере разделенных данных.

Да, именно то решение, которое требовалось. Сейчас нарежу файл на части, скормлю кроносу и потому буду разные таблицы склеивать в одну.
 
На 8 Гб смело бейте, должно схавать. Хотя зависит от длины строки....
Тут как бы нет четких правил ни по размеру файла, ни по длине строки/кол-ву столбцов, когда все колошматит.
Да, именно то решение, которое требовалось. Сейчас нарежу файл на части, скормлю кроносу и потому буду разные таблицы склеивать в одну.
 
Как применять бесплатный Cronos 6.4 для конвертации

За идею благодарите stepany4

Скачиваете с официального сайта бесплатный Cronos 6.4, устанавливаете в папку. Затем можно удалить из программ Windows, а папку носить в портабельном виде. [UPD подробнее все шаги читайте тут. Если есть трудности, качайте готовые файлы здесь, но лучше все же сделать самостоятельно] Банки, созданные в пробнике 6.4 можно открывать в пиратском Cronos 5.

Зачем это нужно:

- в Cronos 5 плохая идентификация, и нужно возиться с сигнатурами для удаления дублей. При этом пятерка нормально открывает такие конверты.

- в 6.4 гораздо удобнее конвертировать csv и прочие файлы, чем в 5

Ограничения:

- два раза банк в пробнике не открыть, поэтому нужно успеть все сделать до выключения программы или перезагрузки компьютера

- пробник создает банки малой модели, и если записей больше 10-30 млн, могут появляться ошибки (у меня на практике появляются после 20 млн). В таком случае можете создать несколько банков в 6.4, а затем открыть все в 5 и слить.
 
Последнее редактирование:
Банки, созданные в пробнике 6.4 можно открывать в пиратском Cronos 5
А наоборот?
Открыть банк с пятёрки поредактировать его и сохранить, что бы потом работать на 5?
У меня не открывает их вообще и я не пойму то ли это так надо, то ли у меня встала она криво
 
У меня не открывает их вообще и я не пойму то ли это так надо, то ли у меня встала она криво

Последовательность такая:

- установил бесплатный Cronos 6.4 на чистую винду,
- скопировал все файлы кроноса в другую папку,
- удалил из папки все файлы, кроме Cronos.exe, CronosBugs.dll, libxl.dll
- папку с тремя файлами залил в сеть,
- стер Cronos 6.4 из программ (я в виртуалке делал, поэтому просто откатил систему по состоянию на до установки)
- папку скачал на чистую систему, запустил Cronos.exe

Скинул готовую папку, ее только скачать и запустить. Но по безопасности, думаю, захотите сделать сами.
 
Последнее редактирование:
Залил готовый портабельный пробник 6.4: https://mega.nz/file/WpoGzSKY#r2LJOsOXBu8Ehg0SSU6bXc-KDzDvPJ2XGmphj7-FkFw

После установки дистрибутива исключены все файлы, кроме Cronos.exe, CronosBugs.dll, libxl.dll. Запускается без установок софта в программы.
 
Последнее редактирование:
я в свои конверты собираю поле телефона без начальной 7\8 для России. Это гораздо проще приводить как по мне, мы имеем меньшее поле (меньший вес файла) у нас ничего не теряется.

Вот пример по этой теме. В базе журналистов есть вьетнамец с +84969795989. И там же русские телефоны, записанные через 8, а не 7. Код московской области 496. Следовательно, русские телефоны через восьмерку при нормализации такой базы в единый десятизначный номер будут неотличимы от международных вьетнамских телефонов. А этот конкретный вьетнамский номер будет обрезан до 4969795989 и станет бессмысленным мусором.
 
Вот пример по этой теме. В базе журналистов есть вьетнамец с +84969795989. И там же русские телефоны, записанные через 8, а не 7. Код московской области 496. Следовательно, русские телефоны через восьмерку при нормализации такой базы в единый десятизначный номер будут неотличимы от международных вьетнамских телефонов. А этот конкретный вьетнамский номер будет обрезан до 4969795989 и станет бессмысленным мусором.
Пример отличный )
Я убираю восьмёрку (или семёрку) для поиска. Разумеется по ру номерам 9xxxxxxxxx я не дозвонюсь и буду прибавлять восьмёрку.
Теперь давай посмотрим на твой номер. Ты, я так понимаю, оставил восьмёрку и полагаешь что я, добавив её к своему урезанному номеру, не дозвонюсь куда то, а ты дозвонишься? :)

Телефон кстати у вьетнамца российский, и без восьмёрки он будет смотреться прекрасно, там выше него ещё пара вьетнамцев с +8491 и +8490 соответственно.

А международный формат вьетнама насколько я понимаю 8-10-84-4 для городских и 84-4 для сотовых, но это пофигу, от того что я в бд убираю 8 имея ввиду что она там есть, меняться ничего не может

Но я ничео не навязываю, кому как хочется, я просто даю версию и возможно кому то это покажется разумным
 
Последнее редактирование:
Телефон кстати у вьетнамца российский

У вьетнамца не российский телефон, в том и проблема. Код Вьетнама +84. Полный телефон +8496979598. Ты нормализуешь все номера в десятизначные. И после такой нормализации его реальный вьетнамский телефон превращается в битый российский (+7) 496979598.

Раньше делал примерно также, могу даже пару формул кинуть нормализации. Но сейчас стало очень много баз, и не исключено, что в каждой может оказаться группа номеров, которые при такой нормализации запишутся с ошибкой.

Для глобалки такие ошибки терпимы, так как я под глобаку создаю особое поле, куда пишу вообще все цифры подряд. Но для связей в базе и вообще поиска каких-то конкретных людей эта штука фатальная.
 
У вьетнамца не российский телефон, в том и проблема. Код Вьетнама +84. Полный телефон +8496979598.
ОК. давай ещё раз, я не понимаю. Ты оставил восьмёрку и поэтому дозвонишься (+8496979598), я убрал её и плюс для поиска (у меня 496979598), но у меня не амнезия, я добавлю 8 для звонка, будет как у тебя (8496979598) и я дозвонюсь, не туда? Если номер вьетнамский и я и ты попадём в одно место, и если российский тоже.
Ты нормализуешь все номера в десятизначные.
Нет, не все. Я убираю - + () и нормализую ^7([0-9]{10})$ и ^8([0-9]{10})$.
В любом случае это готовое поле для поиска в котором ничего не пропало, у тебя сделана каша в той БД и найти по нему ничего нельзя, нужно нормализовывать так или иначе.
 
ОК. давай ещё раз, я не понимаю. Ты оставил восьмёрку и поэтому дозвонишься (+8496979598), я убрал её и плюс для поиска (у меня 496979598), но у меня не амнезия, я добавлю 8 для звонка, будет как у тебя (8496979598) и я дозвонюсь, не туда? Если номер вьетнамский и я и ты попадём в одно место, и если российский тоже.

У меня вьетнамский номер будет записан как 8496979598, а если а если бы был (сейчас его нет) российский 496979598, то его запишу как 7496979598. Национальный префикс нужен (когда это возможно), иначе будет путаница. Плюс не нужен, да.

в котором ничего не пропало

Но номер же левый российский получается *496979598, а его не существует. Или же ты нормализуешь только мобильные восьмерки, но не городские номера.
 
Последнее редактирование:
Да это не самое важное. В каком формате хранить номера. Гораздо важнее другое.
Что бы запросы были без оператора шаблона, "джокера" ? * т.к. это влияет на время выполнения запроса. Если вы пробиваете несколько номеров, а то и десятки, то время будет критически важным, это очень долго.
Не так долго как с расширенным поиском, логическими условиями И ИЛИ НЕ даже. Чем с условиями и джокерами.
 
Как конвертировать большие банки (баг с путаницей данных в полях)
Как склеивать таблицы с одним общим полем
Как работать с тайскими и прочими экзотическими алфавитами


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

Инструкция для сложного случая, объединяет несколько решений. Для более простых конвертов берите отдельные куски.

Нужно конвертировать в одну большую базу Cronos 5:

- несколько csv-файлов в общей сложности более 70 млн (исходных) записей
- с длинной строкой
- тайскими буквами UTF8
- запятыми внутри строки, которые путаются с запятыми-разделителями

У csv не совпадает структура таблицы, но совпадают отдельные поля. Например:

АА-csv:
АА1/Фамилия «Иванов»
АА2/Имя «Иван»
АА3/Паспорт «4142557788»

ББ-csv:
ББ1/Почта «ivanov@yandex.ru»
ББ2/Паспорт «4142557788»
ББ3/Пол «мужчина»


По совпадению полей АА3 и ББ2 нужно склеить эти две записи в базу ВВ, чтобы было:

ВВ1/Фамилия «Иванов»
ВВ2/Имя «Иван»
ВВ3/Паспорт «4142557788»
ВВ4/Почта «ivanov@yandex.ru»
ВВ5/Пол «мужчина»


Cronos до версии 7 не поддерживает UTF8, до версии 6.4 имеет проблему с идентификацией записей. Основной язык вне кириллицы и латиницы в оригинальных csv тайский, он встречается в разных полях. Поэтому пришлось обработать csv, конвертировать в пробном Cronos 6.4 (как это делать), а потом допилить банк в Cronos 5. Если напрямую в 5, то теряется несколько сотен записей.

Использовал:

- Пробная версия Cronos 6.4
- Текстовый редактор EmEditor. Последняя версия бесплатно здесь.
- Полная версия Cronos 5

Что делаем:

1) Открываем каждый исходник csv в EmEditor. Если появится меню с кодировкой, то «выбрать кодировку из списка» и далее выбрать тайскую Windows.

2) Скопировать первые две строки из каждого csv-исходника, сделать общую строчку с названиями полей, чтобы названия полей не повторялись. То есть так, как будет в базе ВВ (см. описание выше)

3) ЕСЛИ РАЗДЕЛИТЕЛЬ — ЗАПЯТАЯ: Правка — Найти — в верхнюю графу копируете пустую табуляцию. Дальше Замена>> , в Заменить надо — пусто. Нажимаете Заменить все.

4) Правка — CSV — обычно «запятая». Затем CSV-конвертер ставим галочку «Разрешить разделитель в двойных кавычках». Посмотрите скрин от stepany4, там все понятно.

5) Правка — CSV – Преобразовать в — Табуляция — Продолжить

6) Сохранить файл, указав ТАЙСКУЮ кодировку до сохранения

8) Сервис — Разделение и объединение — Разделить документ на несколько файлов — Через каждое указанное количество строк — 7000000 (по практике можно и больше) — Далее — Повторить первую строку документа

7) Открыть Cronos 6.4. Банк — Список банков — Новый — ввести папку для банка, словари можно не создавать — Выполнить

10) Проектирование — Структуры данных — Импорт из файла — Использовать имя файла или каталог — Файл — указать текстовый файл со структурой, созданный в пункте 2 выше — Открыть.

11) Кодировка — Windows. Разделители — галочка. Первая строка содержит имена полей — галочка. Основной — указать основной разделитель (обычно запятая). Удалять пробелы — галочка. Удалять кавычки — галочка. Определять тип поля — без галочки. В названиях полей — указать поля тип и размеры полей.

12) В следующем меню нажать «Целиком» и «Сохранить структуру».

13) Проверить, что структура банка сохранена. Затем Проектирование — Структуры данных — Импорт из файла — Использовать имя файла или каталог — Файл — указать один из разделенных csv – Открыть

14) Кодировка — Windows. Разделители — галочка. Первая строка содержит имена полей — галочка. Основной — табуляция. Удалять пробелы — галочка. Удалять кавычки — галочка. Определять тип поля — без галочки. Поля можно не редактировать, так как структура банка уже прописана.

15) В следующем меню сначала нажать «Все в одну», затем посмотреть обе структуры, нажать «Целиком», потом «Извлечь данные».

16) Повторить то же самое для всех остальных разделенных csv-файлов.

17) Проектирование — Структуры банка данных — Свойства — Идентификация. Тип идентификации — слияние при совпадении ключа. Набор — Новый — выбрать те поля, которые общие для всех csv-исходников (см. пример во вводной части) — Ок.

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

19) Пробный Cronos 6.4 создает банк старой малой модели, там ошибки были после 20-30 млн записей. Поэтому создал в Cronos 6.4 три банка (банк1, банк2, банк3) и слил их затем таблицами обмена:

а) добавить в Cronos 5 банк1, банк2, банк3, созданные в Cronos 6.4

б) Создать в Cronos 5 новый банк4: Банк — Список банков — Новый — ввести папку для банка, словари можно не создавать — Выполнить

в) скопировать в банк4 структуру банка1: Проектирование — Структуры данных — Структура — ткнуть в банк1 и нажать «Выполнить».

г) банк4: Проектирование — Таблиц обмена — Таблицы обмена — Новая — ткнуть в базу, ввести имя таблицы и нажать «Создать». Проверить, что все поля есть (кнопка «Свойства»). Ткуть в «Выполнить».

д) сделать то же самое с банк1, банк2, банк3

е) проверить, что у всех банков один мнемокод базы — иначе копирование не начнется. Также проверить, что в таблицах обмена одна структура и одни внешние номера — при правильном выполнении инструкции выше они будут идентичными.

и) Открыть банк1: сделать простой поисковый запрос кнопкой с биноклем, в появившемся меню нажать седьмую слева кнопку «Обмен банками между банками» (она левее кнопки с дискетами). В следующем меню: Таблицы обмена — выбрать таблицу обмена банка1. Банк-получатель — выбрать банк4. Таблица обмена банка-получателя — выбрать банк4. Снять галочки «Очищать банк», «Проводить идентификацию», «Вычислять формулы». Нажать «Выполнить»

к) сделать то же самое с банк2, банк3.

20) Теперь в итоговом банке4 нужно склеить записи, у которых общие значения в полях. Для тайской базы это PassengerID (у меня АА1) и ReservationID (у меня АА4). Обычное слияние идентификацией по полям в Cronos 5 работает криво, нужно использовать сигнатуры.

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

б) Выбрать ключевые поля (АА1 и АА4), при совпадении которых записи сливаются.

в) Прописать и применить формулу (как делать формулы и что такое массовая коррекция).

Код:
@a:=UPPER(АА1<<АА4) // сливаем в сигнатуру два поля и переводим все символы в верхний регистр
АА58 := getsignature(@a) // записываем сигнатуру в поле А58

г) Вручную отсмотреть несколько дублей и значения в поле А16, чтобы они совпадали у дублей.

д) построить индексы для поля сигнатуры — иначе слияния не будет

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

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

21) Дальше тайскую базу билетов уже обрабатывал по мелочи формулой.
 
Последнее редактирование:
Формула для базы авиабилетов из мануала по конвертам больших банков (баг с путаницей в полях)

Код:
@o4:="0000";
@o5:="00000";
@o6:="000000";
@o7:="0000000";
@o8:="00000000";
@o9:="000000000";
@o10:="0000000000";
@o11:="00000000000";
@o12:="000000000000";
@o13:="0000000000000";
@o14:="00000000000000";
@o15:="000000000000000";
@ed4:="1111";
@ed5:="11111";
@ed6:="111111";
@ed7:="1111111";
@ed8:="11111111";
@ed9:="111111111";
@ed10:="1111111111";
@ed11:="11111111111";
@ed12:="111111111111";
@ed13:="1111111111111";
@ed14:="11111111111111";
@ed15:="111111111111111";

АА59:=АА7<<" "<<АА6;
АА60:=АА6<<" "<<АА7;

@a:=substr(АА8,1,4);
if @a # "1900" THEN АА61:=АА8;

@RAW :=АА9; // ОПЕРАЦИЯ С MOBILE NO (первый мобильник)
@c :="";
@DLINA :=LEN(@RAW);
@COUNT :=0;
WHILE(@COUNT<@DLINA) DO
(
@COUNT:= @COUNT + 1;
@PEREBOR:=SUBSTR (@RAW,@COUNT,1)
IF NUM (@PEREBOR)=1  THEN @c := @c<<@PEREBOR
);
@ITOG:=LEN(@c)
IF ((@ITOG>5) & (@c # @o6) & (@c # @o7) & (@c # @o8) & (@c # @o9) & (@c # @o10) & (@c # @o11) & (@c # @o12) & (@c # @o13) & (@c # @o14) & (@c # @o15) & (@c # @ed6) & (@c # @ed7) & (@c # @ed8) & (@c # @ed9) & (@c # @ed10) & (@c # @ed11) & (@c # @ed12) & (@c # @ed13) & (@c # @ed14) & (@c # @ed15)) THEN АА67(1):=@c;

@c:="";
@b:=АА10;
@c:=SWAP(@b," ","");
@c:=SWAP(@b,",","");
@c:=SWAP(@b,".","");
@c:=SWAP(@b,")","");
@c:=SWAP(@b,"(","");
@c:=SWAP(@b,"/","");
@c:=SWAP(@b,"\","");
@c:=SWAP(@b,"[","");
@c:=SWAP(@b,"]","");
@c:=SWAP(@b,"|","");
@c:=SWAP(@b,"?","");
@c:=SWAP(@b,"#","");
@c:=SWAP(@b,";","");
@c:=SWAP(@b,":","");
@ITOG:=LEN(@c)
IF ((@ITOG>4) & (@c # @o6) & (@c # @o7) & (@c # @o8) & (@c # @o9) & (@c # @o10) & (@c # @o11) & (@c # @o12) & (@c # @o13) & (@c # @o14) & (@c # @o15) & (@c # @ed6) & (@c # @ed7) & (@c # @ed8) & (@c # @ed9) & (@c # @ed10) & (@c # @ed11) & (@c # @ed12) & (@c # @ed13) & (@c # @ed14) & (@c # @ed15)) THEN АА63:=@c;

@a:="";
@a:=substr(АА11,1,4);
if (@a # "1900") & (@a # "1999") THEN АА64:=АА11;

@a:="";
@a:=substr(АА23,1,4);
if (@a # "1900") & (@a # "1999") THEN АА65:=АА23;

@c:="";
@b:=АА32;
@c:=SWAP(@b," ","");
@c:=SWAP(@b,",","");
@c:=SWAP(@b,".","");
@c:=SWAP(@b,")","");
@c:=SWAP(@b,"(","");
@c:=SWAP(@b,"/","");
@c:=SWAP(@b,"\","");
@c:=SWAP(@b,"[","");
@c:=SWAP(@b,"]","");
@c:=SWAP(@b,"|","");
@c:=SWAP(@b,"?","");
@c:=SWAP(@b,"#","");
@c:=SWAP(@b,";","");
@c:=SWAP(@b,":","");
@ITOG:=LEN(@c)
IF ((@ITOG>4) & (@c # @o6) & (@c # @o7) & (@c # @o8) & (@c # @o9) & (@c # @o10) & (@c # @o11) & (@c # @o12) & (@c # @o13) & (@c # @o14) & (@c # @o15) & (@c # @ed6) & (@c # @ed7) & (@c # @ed8) & (@c # @ed9) & (@c # @ed10) & (@c # @ed11) & (@c # @ed12) & (@c # @ed13) & (@c # @ed14) & (@c # @ed15)) THEN АА71:=@c;


@a:="";
@a:=substr(АА33,1,4);
if (@a # "1900") & (@a # "1999") THEN АА66:=АА33;

@RAW :=АА47; // ОПЕРАЦИЯ С Fax
@c :="";
@DLINA :=LEN(@RAW);
@COUNT :=0;
WHILE(@COUNT<@DLINA) DO
(
@COUNT:= @COUNT + 1;
@PEREBOR:=SUBSTR (@RAW,@COUNT,1)
IF NUM (@PEREBOR)=1  THEN @c := @c<<@PEREBOR
);
@ITOG:=LEN(@c)
IF ((@ITOG>5) & (@c # @o6) & (@c # @o7) & (@c # @o8) & (@c # @o9) & (@c # @o10) & (@c # @o11) & (@c # @o12) & (@c # @o13) & (@c # @o14) & (@c # @o15) & (@c # @ed6) & (@c # @ed7) & (@c # @ed8) & (@c # @ed9) & (@c # @ed10) & (@c # @ed11) & (@c # @ed12) & (@c # @ed13) & (@c # @ed14) & (@c # @ed15)) THEN АА67(2):=@c;


@RAW :=АА48; // ОПЕРАЦИЯ С Telephone
@c :="";
@DLINA :=LEN(@RAW);
@COUNT :=0;
WHILE(@COUNT<@DLINA) DO
(
@COUNT:= @COUNT + 1;
@PEREBOR:=SUBSTR (@RAW,@COUNT,1)
IF NUM (@PEREBOR)=1  THEN @c := @c<<@PEREBOR
);
@ITOG:=LEN(@c)
IF ((@ITOG>5) & (@c # @o6) & (@c # @o7) & (@c # @o8) & (@c # @o9) & (@c # @o10) & (@c # @o11) & (@c # @o12) & (@c # @o13) & (@c # @o14) & (@c # @o15) & (@c # @ed6) & (@c # @ed7) & (@c # @ed8) & (@c # @ed9) & (@c # @ed10) & (@c # @ed11) & (@c # @ed12) & (@c # @ed13) & (@c # @ed14) & (@c # @ed15)) THEN АА67(3):=@c;


@e:=UPPER(АА49); // сигнатура имайла
АА68:= getsignature(@e);

АА69:=АА52<<" "<<АА51;
АА70:=АА51<<" "<<АА52;


@RAW :=АА54<<АА55; // ОПЕРАЦИЯ С Emergency Telephone
@c :="";
@DLINA :=LEN(@RAW);
@COUNT :=0;
WHILE(@COUNT<@DLINA) DO
(
@COUNT:= @COUNT + 1;
@PEREBOR:=SUBSTR (@RAW,@COUNT,1)
IF NUM (@PEREBOR)=1  THEN @c := @c<<@PEREBOR
);
@ITOG:=LEN(@c)
IF ((@ITOG>5) & (@c # @o6) & (@c # @o7) & (@c # @o8) & (@c # @o9) & (@c # @o10) & (@c # @o11) & (@c # @o12) & (@c # @o13) & (@c # @o14) & (@c # @o15) & (@c # @ed6) & (@c # @ed7) & (@c # @ed8) & (@c # @ed9) & (@c # @ed10) & (@c # @ed11) & (@c # @ed12) & (@c # @ed13) & (@c # @ed14) & (@c # @ed15)) THEN АА67(4):=@c;

@i:=АА41<<" "<<АА42; // сливаем поля adres 1 и adres 2 и нормализуем результат
@i:=SWAP(@i,"."," ");
@i:=SWAP(@i,","," ");
@i:=SWAP(@i,":"," ");
@i:=SWAP(@i,";"," ");
АА72:=trim(@i);
 
Пробный Cronos 6.4 создает банк старой малой модели, там ошибки были после 20-30 млн записей. Поэтому создал в Cronos 6.4 три банка (банк1, банк2, банк3) и слил их затем таблицами обмена
Демо 6.4. создает банки в старой версии, где существует малая и большая модель. Малая модель это размер банка до 4 Гб, достаточно при создании, или в меню оптимизации тыкнуть галочку "Большая модель" и ограничение по весу банка будет снято.
Проектирование — Структуры банка данных — Свойства — Идентификация. Тип идентификации — слияние при совпадении ключа. Набор — Новый — выбрать те поля, которые общие для всех csv-исходников (см. пример во вводной части) — Ок
Следует учитывать что операции сравнения, а далее идентификации и слияния происходят с учетом всех символов, лишний пробел, иной символ, регистр - всё это влияет, потому записи в полях должны быть приведены к единому виду с учетом нюансов ввода, занесения. Кстати, вовсе не обязательно для этого создавать поле и заполнять его значением сигнатуры.
Повторить то же самое для всех остальных разделенных csv-файлов
Не обязательно так усложнять всё. Вы можете объединить все в один файл, если это огромнейший текстовик и Кронос его не подхватит, то разбить на меньшие части, 8, 6 Гб в зависимости от длины полей и кол-ва строк.
Сделать массовую коррекцию, загалчив в массовой коррекции пункт "идентификация", формулы можно не пересчитывать
Как конвертировать большие банки (баг с путаницей данных в полях)
Не совсем понял что именно вы в этом наборе учитываете, в чем логика, но классически такие типы идентификации как слияние и отстранение при совпадении ключа, слияние с неполным ключем - нужны скорее во время обмена данных между банками через таблицы, хотя это и не правило, ну а слияние подчиненных объектов, слияние связанных объектов скорее для операции с готовой базой.
Вы можете все это сделать гораздо проще по Ctrl+Shift+D в версиях выше 5
2020-07-11_093953.jpg


Ну и что до формулы, я конечно поражен что для одного набора вы пишите такое длинное заклинание. Зачастую не нужно так усложнять всё, ведь в тексте с регулярками можно большинство операций проделать. Не проще ли это? Я не знаю кто как, но мне как-то привычней видеть что я делаю и во время работы делать как можно меньше движений. В этом плане, рациональней, как мне кажется обработку текста делать в редакторах, а не в кроносе...
Что до вашего конверта, то рекомендую вам поэкспериментировать с функцией TRANSLIT которая транслитерирует латиницу в кириллицу (направление 1) и латиницу в кириллицу (направление 0), т.н. "Система Б".
Таким образом, вы сможете перевести Ф.И.О по стандартам ГОСТ 7.79-2000/ISO 9-95.
Не без косяков, нюансы занесения есть, это все лечится правилами для массовой замены, сохранения правил в файле после транслитерации.
То есть, например запись SERGEY будет переведена в СЕРГЕЫ
Соответственно, делаем замену ЕЫ на ЕЙ, и так далее с гласными. Со временем, у вас накопится много правил и вообщем, в массовой замене с использованием файла с правками, все будет доведено до максимально-возможного совершенства.
Функция
TRANSLIT в версиях начиная с 6 и выше
 
Последнее редактирование:
Добавил в мануал ссылку на важные замечания выше.

Демо 6.4. создает банки в старой версии, где существует малая и большая модель. Малая модель это размер банка до 4 Гб, достаточно при создании, или в меню оптимизации тыкнуть галочку "Большая модель" и ограничение по весу банка будет снято.

А мне показалось, что у пробника вообще только малая модель и возжна, что это ограничение бесплатной версии. Спасибо за замечание, с этим все будет куда проще.

Следует учитывать что операции сравнения, а далее идентификации и слияния происходят с учетом всех символов, лишний пробел, иной символ, регистр - всё это влияет, потому записи в полях должны быть приведены к единому виду с учетом нюансов ввода, занесения. Кстати, вовсе не обязательно для этого создавать поле и заполнять его значением сигнатуры.

В сигнатуре все приведено к верхнему регистру через UPPER. Лишние символы от нелишних в данном случае отсеять сложно.

Не обязательно так усложнять всё. Вы можете объединить все в один файл, если это огромнейший текстовик и Кронос его не подхватит, то разбить на меньшие части, 8, 6 Гб в зависимости от длины полей и кол-ва строк.

Не совсем понял что именно вы в этом наборе учитываете, в чем логика, но классически такие типы идентификации как слияние и отстранение при совпадении ключа, слияние с неполным ключем - нужны скорее во время обмена данных между банками через таблицы, хотя это и не правило, ну а слияние подчиненных объектов, слияние связанных объектов скорее для операции с готовой базой.
Вы можете все это сделать гораздо проще по Ctrl+Shift+D в версиях выше 5

Идентификация работает корректно после пятерки, но не на пятерке. В мануале рассматривается бесплатный софт - пробник 6.4 и обычная пятерка. Пробником, конечно, идентифицировать удобнее. Но у него ограничение на объем банка, так что приходилось делать пятеркой и сигнатурами. Но с учетом пункта насчет большой модели все операции можно выполнять в рамках одной рабочей сессии на 6.4 - чуть позже протестирую.

Ну и что до формулы

Мне исторически формулы ближе, но вообще да - часть операций можно перенести в редактор, и так будет правильнее с т.з. рабочего времени.
 
А мне показалось, что у пробника вообще только малая модель и возжна, что это ограничение бесплатной версии. Спасибо за замечание, с этим все будет куда проще.
В 6.4 нет больших моделей, т.к. это про, а не плюс. Речь шла как раз о банках создаваемых в плюс. Если вам зачем-то важно кол-во, вес, то такой банк нужно создавать в старых плюсовых версиях, где есть галочка "Большая модель".
Если вы работаете в демо 6.4.
В сигнатуре все приведено к верхнему регистру через UPPER. Лишние символы от нелишних в данном случае отсеять сложно.
Ну речь была об операции вообщем, а не конкретном наборе. И не только в заглавных и прописных буквах дело, это может быть и пробел и любой символ, случайно затесавшийся в набор.
То же касается символьных полей. Для работы которых нужна перестройка индексов. Например email если вы будете делать их прописными, лажи внутри не будет, все это добро вы будете хранить в поле, которое символьное, то у вас будет найдено точное вхождение, вы построите точную связь. Что по поиску значений таких записей невозможно, т.к. @ _ -. для кроноса по сути пробелы, и это набор слов, да и связи строятся по индексу, расширенный поиск с учетом И. Но здесь вы потеряете и гибкость поиска, т.к. будет найдено точное вхождение побайтового значения. Варианты запросов без @ и так далее не будут работать.
Это скорее для людей, которые слишком много пробивают почт, и тратят много времени на листание и поиск точных вхождений. Такое целесообразно делать. Во всем есть свои плюсы и минусы.
Если бы все читали мануал изначально, в начале пути, то не пришлось бы потом переделывать, или мучатся с нечеткими вхождениями при поиске значений тех же email, если вы понимаете что я имею в виду.
Идентификация работает корректно после пятерки, но не на пятерке.
Ну да, там идентификация по сути опция удаления полных дублей и не более того.
В мануале рассматривается бесплатный софт - пробник 6.4 и обычная пятерка. Пробником, конечно, идентифицировать удобнее. Но у него ограничение на объем банка, так что приходилось делать пятеркой и сигнатурами. Но с учетом пункта насчет большой модели все операции можно выполнять в рамках одной рабочей сессии на 6.4 - чуть позже протестирую.
Ну так чего вы мучаетесь? Скиньтесь на реверс 7.0 и пользуйтесь им.
Мне исторически формулы ближе, но вообще да - часть операций можно перенести в редактор, и так будет правильнее с т.з. рабочего времени.
Тем более. С вашим мышлением вы освоите скрипты, а в 7.0 очень много изменений. Вы сможете делать вещи гораздо более гибкие, гораздо быстрее на скриптах, а не на формулах. Про скорость работы программы, обработки больших данных - я молчу.
Вам нужно смотреть в эту сторону, а не юзать софт девятилетней давности (5.0).
 
Последнее редактирование:
Ну так чего вы мучаетесь? Скиньтесь на реверс 7.0 и пользуйтесь им.
Кстати, а нет какого то варианта приобрести 7 физиком ? Неужели кто то возьмётся разреверсить за меньшие деньги, или есть ньюансы?
10к за лицензию на 10 лет не кажутся большими деньгами,но на оффе предложения только организациям по безналу
 


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