Страница 1 из 1

Не работает скрипт CheckEmptyUsersFields

СообщениеДобавлено: Пт янв 17, 2020 9:02 am
rustambek
Добрый день.
Не отработал скрипт, в чем может быть проблема?

Re: Не работает скрипт CheckEmptyUsersFields

СообщениеДобавлено: Пт янв 17, 2020 11:56 am
Алексей Пикуров
Добрый день. Скрипт работал очень долго, компьютер тормозил либо пользователей слишком много.

Можете в 42-й строке вместо

Код: Выделить всё
SetScriptTimeOut(20000);

указать таймаут в 30000 (30 секунд). Или выполнить скрипт повторно.

Re: Не работает скрипт CheckEmptyUsersFields

СообщениеДобавлено: Пт янв 17, 2020 11:59 am
Алексей Пикуров
А что это у вас в исходниках за "если", "начать", "конец" и "или" ???

Re: Не работает скрипт CheckEmptyUsersFields

СообщениеДобавлено: Пт янв 17, 2020 12:12 pm
CyberDynamic
Кажися браузерный переводчик нагнул админку [smilie=biggrin.gif]

Re: Не работает скрипт CheckEmptyUsersFields

СообщениеДобавлено: Пн янв 27, 2020 12:24 pm
Алексей Пикуров
Рустам, разобрались с проблемой? Установка бОльшего тайм-аута помогла решить вопрос?

Re: Не работает скрипт CheckEmptyUsersFields

СообщениеДобавлено: Пн янв 27, 2020 3:07 pm
rustambek
Добрый день.
Не помогло. Какие еще есть варианты?

Re: Не работает скрипт CheckEmptyUsersFields

СообщениеДобавлено: Пн янв 27, 2020 3:08 pm
Алексей Пикуров
Покажите текст скрипта, пожалуйста.

Re: Не работает скрипт CheckEmptyUsersFields

СообщениеДобавлено: Пн янв 27, 2020 3:17 pm
rustambek
Код: Выделить всё
// CheckEmptyUsersFields service script
//------------------------------------------------------------------------------------
// If you have users with empty fields, you can export full list of them to a CSV file
// and analyze it in Excel.
// -----------------------------------------------------------------------------------
// ver 1.0 / 19 Feb 2016, (c) Alexey Pikurov, [email protected]
// help (russian) - https://www.nsoft-s.com/forum/viewtopic.php?f=1&t=4129
//------------------------------------------------------------------------------------
const
  EXPORT_FILE_NAME      = 'c:\users_report.csv';
 
  CHECK_WHAT            = '<COMMON>,<WORK>,<HOME>';
  //CHECK_WHAT            = '<MY>';
 
  //MY_SET = 'FotoCRC32';
  COMMON_FIELDS_MIN_SET = 'FirstName;MiddleName;LastName;Birthday;Sex;FotoCRC32;';
  WORK_FIELDS_SET       = 'Email;WorkPosition;WorkCompanyName;WorkOffice;WorkPhone;WorkFax;' +
                          'WorkPager;WorkStreetAddress;WorkCity;WorkState;WorkZIP;WorkCountry;WorkWWW;';
  HOME_FIELDS_SET       = 'MaritalStatus;HomePhone;HomeFax;HomeCellular;HomeStreetAddress;HomeCity;HomeState;HomeZIP;HomeCountry;HomeWWW;';
 
function CheckDate(dt: double): boolean;
var
  iYears: integer;
begin
  iYears := YearsBetween(Now, dt);
 
    if (iYears > 100) or (iYears < 16) then result := false
      else result := true;
end;

var
  sUsersList, sJSON, sOut, sUserData, sTitle,
  sNick, sFirstName, sMiddleName, sLastName, sBirthday, sSex, sFoto,
  sEmail, sWorkPosition, sWorkCompanyName, sWorkOffice, sWorkPhone, sWorkFax,
  sWorkPager, sWorkStreetAddress, sWorkCity, sWorkState, sWorkZIP, sWorkWWW,
  sWorkCountry, sMaritalStatus, sHomePhone, sHomeFax, sHomeCellular,
  sHomeStreetAddress, sHomeCity, sHomeState, sHomeZIP, sHomeCountry, sHomeWWW: string;
 
  iMaritalStatus, iHomeCountry, iUIN, iSex, iFotoCRC32, iWorkCountry: integer;

  dtBirthday: double;
  bFlag: boolean;
begin
  SetScriptTimeOut(40000);

  sUsersList := mGetUINSListByRole(-1);

  DeleteFile(EXPORT_FILE_NAME);
 
  sOut   := '';
  sTitle := 'UIN;Nick;';
 
    if pos('<COMMON>', CHECK_WHAT) <> 0 then sTitle := sTitle + COMMON_FIELDS_MIN_SET;
    if pos('<WORK>', CHECK_WHAT) <> 0 then sTitle := sTitle + WORK_FIELDS_SET;
    if pos('<HOME>', CHECK_WHAT) <> 0 then sTitle := sTitle + HOME_FIELDS_SET;
    //if pos('<MY>', CHECK_WHAT) <> 0 then sTitle := sTitle + MY_SET;
 
  AddLineToFile(sTitle, EXPORT_FILE_NAME);     
 
    while length(sUsersList) > 0 do begin
      bFlag := false;
     
      iUIN := StrToInt(GetNextSt(sUsersList, ','));
      sJSON := mGetUserDataAsJSON(iUIN, 'Nick;' + COMMON_FIELDS_MIN_SET + WORK_FIELDS_SET + HOME_FIELDS_SET);
     
      AddLineToFile(sJSON, 'c:\temp\' + inttostr(iUIN) + '.txt');
      JSONGetString(sJSON, 'Nick', sNick);
     
      sUserData := inttostr(iUIN) + ';' +
                   DecorateStForCSV(sNick) + ';';
// COMMON -----------------------------------------------------------------------------------------     
        if pos('<COMMON>', CHECK_WHAT) <> 0 then begin
          JSONGetString(sJSON, 'FirstName', sFirstName);
          JSONGetString(sJSON, 'MiddleName', sMiddleName);
          JSONGetString(sJSON, 'LastName', sLastName);
          JSONGetDateTime(sJSON, 'Birthday', dtBirthday);
     
            if CheckDate(dtBirthday) then sBirthday := FormatDateTime('dd.mm.yyyy', dtBirthday)
              else sBirthday := '';

          JSONGetInteger(sJSON, 'Sex', iSex);
     
            case iSex of
              0: sSex := '';
              1: sSex := 'male';
              2: sSex := 'female';
            end;
       
          JSONGetInteger(sJSON, 'FotoCRC32', iFotoCRC32);
     
            if iFotoCRC32 = 0 then sFoto := '' else sFoto := 'yes';
     
            if (length(sFirstName) = 0) or (length(sMiddleName) = 0) or (length(sLastName) = 0) or
               (length(sBirthday) = 0) or (length(sSex) = 0) or (length(sFoto) = 0) then bFlag := true;
         
          sUserData := sUserData +
                       DecorateStForCSV(sFirstName) + ';' +
                       DecorateStForCSV(sMiddleName) + ';' +
                       DecorateStForCSV(sLastName) + ';' +
                       DecorateStForCSV(sBirthday) + ';' +
                       sSex + ';' +
                       sFoto + ';';
        end;                   
// WORK --------------------------------------------------------------------------------------------                 
        if pos('<WORK>', CHECK_WHAT) <> 0 then begin
          JSONGetString(sJSON, 'Email', sEmail);
          JSONGetString(sJSON, 'WorkPosition', sWorkPosition);
          JSONGetString(sJSON, 'WorkCompanyName', sWorkCompanyName);
          JSONGetString(sJSON, 'WorkOffice', sWorkOffice);
          JSONGetString(sJSON, 'WorkPhone', sWorkPhone);
          JSONGetString(sJSON, 'WorkFax', sWorkFax);
          JSONGetString(sJSON, 'WorkPager', sWorkPager);
          JSONGetString(sJSON, 'WorkStreetAddress', sWorkStreetAddress);
          JSONGetString(sJSON, 'WorkCity', sWorkCity);
          JSONGetString(sJSON, 'WorkState', sWorkState);
          JSONGetString(sJSON, 'WorkZIP', sWorkZIP);
          JSONGetInteger(sJSON, 'WorkCountry', iWorkCountry);
     
            if iWorkCountry = 0 then sWorkCountry := ''
              else sWorkCountry := 'yes';
                   
          JSONGetString(sJSON, 'WorkWWW', sWorkWWW);
     
            if (length(sEmail) = 0) or (length(sWorkPosition) = 0) or (length(sWorkCompanyName) = 0) or
               (length(sWorkOffice) = 0) or (length(sWorkPhone) = 0) or (length(sWorkFax) = 0) or
               (length(sWorkPager) = 0) or (length(sWorkStreetAddress) = 0) or (length(sWorkCity) = 0) or
               (length(sWorkState) = 0) or (length(sWorkZIP) = 0) or (length(sWorkCountry) = 0) then bFlag := true;
         
          sUserData := sUserData +
                       DecorateStForCSV(sEmail) + ';' +
                       DecorateStForCSV(sWorkPosition) + ';' +
                       DecorateStForCSV(sWorkCompanyName) + ';' +
                       DecorateStForCSV(sWorkOffice) + ';' +
                       DecorateStForCSV(sWorkPhone) + ';' +
                       DecorateStForCSV(sWorkFax) + ';' +
                       DecorateStForCSV(sWorkPager) + ';' +
                       DecorateStForCSV(sWorkStreetAddress) + ';' +
                       DecorateStForCSV(sWorkCity) + ';' +
                       DecorateStForCSV(sWorkState) + ';' +
                       DecorateStForCSV(sWorkZIP) + ';' +
                       DecorateStForCSV(sWorkCountry) + ';' +
                       DecorateStForCSV(sWorkWWW) + ';';
        end;                   
// HOME -------------------------------------------------------------------------------------------     
        if pos('<HOME>', CHECK_WHAT) <> 0 then begin
          JSONGetInteger(sJSON, 'MaritalStatus', iMaritalStatus);
         
            if iMaritalStatus = -1 then sMaritalStatus := '' else sMaritalStatus := 'yes';
           
          JSONGetString(sJSON, 'HomePhone', sHomePhone);
          JSONGetString(sJSON, 'HomeFax', sHomeFax);
          JSONGetString(sJSON, 'HomeCellular', sHomeCellular);
          JSONGetString(sJSON, 'HomeStreetAddress', sHomeStreetAddress);
          JSONGetString(sJSON, 'HomeCity', sHomeCity);
          JSONGetString(sJSON, 'HomeState', sHomeState);         
          JSONGetString(sJSON, 'HomeZIP', sHomeZIP);
          JSONGetInteger(sJSON, 'HomeCountry', iHomeCountry);
         
            if iHomeCountry = -1 then sHomeCountry := '' else sHomeCountry := 'yes';         
           
          JSONGetString(sJSON, 'HomeWWW', sHomeWWW);
     
            if (length(sMaritalStatus) = 0) or (length(sHomePhone) = 0) or (length(sHomeFax) = 0) or
               (length(sHomeCellular) = 0) or (length(sHomeStreetAddress) = 0) or (length(sHomeCity) = 0) or
               (length(sHomeState) = 0) or (length(sHomeZIP) = 0) or (length(sHomeCountry) = 0) then bFlag := true;
         
          sUserData := sUserData +
                       DecorateStForCSV(sMaritalStatus) + ';' +
                       DecorateStForCSV(sHomePhone) + ';' +
                       DecorateStForCSV(sHomeFax) + ';' +
                       DecorateStForCSV(sHomeCellular) + ';' +
                       DecorateStForCSV(sHomeStreetAddress) + ';' +
                       DecorateStForCSV(sHomeCity) + ';' +
                       DecorateStForCSV(sHomeState) + ';' +
                       DecorateStForCSV(sHomeZIP) + ';' +
                       DecorateStForCSV(sHomeCountry) + ';';
        end;                   
// -------------------------------------------------------------------------------------------------
      if bFlag then sOut := sOut + sUserData + #13#10;
    end;
   
  AddLineToFile(sOut, EXPORT_FILE_NAME);   
end.

Re: Не работает скрипт CheckEmptyUsersFields

СообщениеДобавлено: Пн янв 27, 2020 4:41 pm
Алексей Пикуров
Сколько у вас на сервере зарегистрировано пользователей?

Re: Не работает скрипт CheckEmptyUsersFields

СообщениеДобавлено: Вт янв 28, 2020 8:38 am
rustambek
Добрый день.

Re: Не работает скрипт CheckEmptyUsersFields

СообщениеДобавлено: Вт янв 28, 2020 4:35 pm
Алексей Пикуров
Совсем немного, я тестировал только что этот скрипт в версии 7.7 на базе 9.5 тысяч пользователей, он отработал за 16 секунд на моём Core i7.

У меня два варианта: либо компьютер адски тормозит, либо в базе что-то у вас не так. Можете сделать резервную копию файла C:\ProgramData\MyChat Server\db\mcserv.db (достать её из файла бекапа) и отправить мне чатом (в подписи)?

Я проверю работу скрипта на ваших данных.

Re: Не работает скрипт CheckEmptyUsersFields

СообщениеДобавлено: Ср янв 29, 2020 7:17 am
rustambek
Добрый день.

Скинул чатом.

Re: Не работает скрипт CheckEmptyUsersFields

СообщениеДобавлено: Чт янв 30, 2020 2:56 pm
rustambek
Добрый день.

Вы получили мой backup?

Re: Не работает скрипт CheckEmptyUsersFields

СообщениеДобавлено: Чт янв 30, 2020 4:51 pm
Алексей Пикуров
Добрый. Да, бекап есть, отвечу завтра.

Re: Не работает скрипт CheckEmptyUsersFields

СообщениеДобавлено: Вт фев 04, 2020 9:08 am
rustambek
Добрый день.

Как дела с моим бэкапом?

Re: Не работает скрипт CheckEmptyUsersFields

СообщениеДобавлено: Вт фев 04, 2020 10:55 am
Алексей Пикуров
Здравствуйте, Рустам.

Ваш скрипт отработал за две секунды, всё Ок.

Есть более свежая версия скрипта, она работает быстрее:

Код: Выделить всё
// CheckEmptyUsersFields service script
//------------------------------------------------------------------------------------
// If you have users with empty fields, you can export full list of them to a CSV file
// and analyze it in Excel.
// -----------------------------------------------------------------------------------
// ver 1.1 / 4 Feb 2020, (c) Alexey Pikurov, [email protected]
// help (russian) - https://www.nsoft-s.com/forum/viewtopic.php?f=1&t=4129
//------------------------------------------------------------------------------------
const
  EXPORT_FILE_NAME      = 'c:\temp\users_report.csv';
 
  CHECK_WHAT            = '<COMMON>,<WORK>,<HOME>';
 
  COMMON_FIELDS_MIN_SET = 'FirstName;MiddleName;LastName;Birthday;Sex;FotoCRC32;';
  WORK_FIELDS_SET       = 'Email;WorkPosition;WorkCompanyName;WorkOffice;WorkPhone;WorkFax;' +
                          'WorkPager;WorkStreetAddress;WorkCity;WorkState;WorkZIP;WorkCountry;WorkWWW;';
  HOME_FIELDS_SET       = 'MaritalStatus;HomePhone;HomeFax;HomeCellular;HomeStreetAddress;HomeCity;HomeState;HomeZIP;HomeCountry;HomeWWW;';
 
function CheckDate(dt: double): boolean;
var
  iYears: integer;
begin
  iYears := YearsBetween(Now, dt);
 
    if (iYears > 100) or (iYears < 16) then result := false
      else result := true;
end;

var
  sUsersList, sJSON, sOut, sUserData, sTitle,
  sNick, sFirstName, sMiddleName, sLastName, sBirthday, sSex, sFoto,
  sEmail, sWorkPosition, sWorkCompanyName, sWorkOffice, sWorkPhone, sWorkFax,
  sWorkPager, sWorkStreetAddress, sWorkCity, sWorkState, sWorkZIP, sWorkWWW,
  sWorkCountry, sMaritalStatus, sHomePhone, sHomeFax, sHomeCellular,
  sHomeStreetAddress, sHomeCity, sHomeState, sHomeZIP, sHomeCountry, sHomeWWW: string;
 
  iMaritalStatus, iHomeCountry, iUIN, iSex, iFotoCRC32, iWorkCountry: integer;

  dtBirthday: double;
  bFlag: boolean;
  iCount: integer;
begin
  SetScriptTimeOut(120000);

  sUsersList := mGetUINSListByRole(-1);

  DeleteFile(EXPORT_FILE_NAME);
 
  sOut   := '';
  sTitle := 'UIN;Nick;';
 
    if pos('<COMMON>', CHECK_WHAT) <> 0 then sTitle := sTitle + COMMON_FIELDS_MIN_SET;
    if pos('<WORK>', CHECK_WHAT) <> 0 then sTitle := sTitle + WORK_FIELDS_SET;
    if pos('<HOME>', CHECK_WHAT) <> 0 then sTitle := sTitle + HOME_FIELDS_SET;
 
  AddLineToFile(sTitle, EXPORT_FILE_NAME, 1);     
  iCount := 0;
 
    while length(sUsersList) > 0 do begin
      bFlag := false;
     
      iUIN := StrToInt(GetNextSt(sUsersList, ','));
      sJSON := mGetUserDataAsJSON(iUIN, 'Nick;' + COMMON_FIELDS_MIN_SET + WORK_FIELDS_SET + HOME_FIELDS_SET);
     
      JSONGetString(sJSON, 'Nick', sNick);
     
      sUserData := inttostr(iUIN) + ';' +
                   DecorateStForCSV(sNick) + ';';
// COMMON -----------------------------------------------------------------------------------------     
        if pos('<COMMON>', CHECK_WHAT) <> 0 then begin
          JSONGetString(sJSON, 'FirstName', sFirstName);
          JSONGetString(sJSON, 'MiddleName', sMiddleName);
          JSONGetString(sJSON, 'LastName', sLastName);
          JSONGetDateTime(sJSON, 'Birthday', dtBirthday);
     
            if CheckDate(dtBirthday) then sBirthday := FormatDateTime('dd.mm.yyyy', dtBirthday)
              else sBirthday := '';

          JSONGetInteger(sJSON, 'Sex', iSex);
     
            case iSex of
              0: sSex := '';
              1: sSex := 'male';
              2: sSex := 'female';
            end;
       
          JSONGetInteger(sJSON, 'FotoCRC32', iFotoCRC32);
     
            if iFotoCRC32 = 0 then sFoto := '' else sFoto := 'yes';
     
            if (length(sFirstName) = 0) or (length(sMiddleName) = 0) or (length(sLastName) = 0) or
               (length(sBirthday) = 0) or (length(sSex) = 0) or (length(sFoto) = 0) then bFlag := true;
         
          sUserData := sUserData +
                       DecorateStForCSV(sFirstName) + ';' +
                       DecorateStForCSV(sMiddleName) + ';' +
                       DecorateStForCSV(sLastName) + ';' +
                       DecorateStForCSV(sBirthday) + ';' +
                       sSex + ';' +
                       sFoto + ';';
        end;                   
// WORK --------------------------------------------------------------------------------------------                 
        if pos('<WORK>', CHECK_WHAT) <> 0 then begin
          JSONGetString(sJSON, 'Email', sEmail);
          JSONGetString(sJSON, 'WorkPosition', sWorkPosition);
          JSONGetString(sJSON, 'WorkCompanyName', sWorkCompanyName);
          JSONGetString(sJSON, 'WorkOffice', sWorkOffice);
          JSONGetString(sJSON, 'WorkPhone', sWorkPhone);
          JSONGetString(sJSON, 'WorkFax', sWorkFax);
          JSONGetString(sJSON, 'WorkPager', sWorkPager);
          JSONGetString(sJSON, 'WorkStreetAddress', sWorkStreetAddress);
          JSONGetString(sJSON, 'WorkCity', sWorkCity);
          JSONGetString(sJSON, 'WorkState', sWorkState);
          JSONGetString(sJSON, 'WorkZIP', sWorkZIP);
          JSONGetInteger(sJSON, 'WorkCountry', iWorkCountry);
     
            if iWorkCountry = 0 then sWorkCountry := ''
              else sWorkCountry := 'yes';
                   
          JSONGetString(sJSON, 'WorkWWW', sWorkWWW);
     
            if (length(sEmail) = 0) or (length(sWorkPosition) = 0) or (length(sWorkCompanyName) = 0) or
               (length(sWorkOffice) = 0) or (length(sWorkPhone) = 0) or (length(sWorkFax) = 0) or
               (length(sWorkPager) = 0) or (length(sWorkStreetAddress) = 0) or (length(sWorkCity) = 0) or
               (length(sWorkState) = 0) or (length(sWorkZIP) = 0) or (length(sWorkCountry) = 0) then bFlag := true;
         
          sUserData := sUserData +
                       DecorateStForCSV(sEmail) + ';' +
                       DecorateStForCSV(sWorkPosition) + ';' +
                       DecorateStForCSV(sWorkCompanyName) + ';' +
                       DecorateStForCSV(sWorkOffice) + ';' +
                       DecorateStForCSV(sWorkPhone) + ';' +
                       DecorateStForCSV(sWorkFax) + ';' +
                       DecorateStForCSV(sWorkPager) + ';' +
                       DecorateStForCSV(sWorkStreetAddress) + ';' +
                       DecorateStForCSV(sWorkCity) + ';' +
                       DecorateStForCSV(sWorkState) + ';' +
                       DecorateStForCSV(sWorkZIP) + ';' +
                       DecorateStForCSV(sWorkCountry) + ';' +
                       DecorateStForCSV(sWorkWWW) + ';';
        end;                   
// HOME -------------------------------------------------------------------------------------------     
        if pos('<HOME>', CHECK_WHAT) <> 0 then begin
          JSONGetInteger(sJSON, 'MaritalStatus', iMaritalStatus);
         
            if iMaritalStatus = -1 then sMaritalStatus := '' else sMaritalStatus := 'yes';
           
          JSONGetString(sJSON, 'HomePhone', sHomePhone);
          JSONGetString(sJSON, 'HomeFax', sHomeFax);
          JSONGetString(sJSON, 'HomeCellular', sHomeCellular);
          JSONGetString(sJSON, 'HomeStreetAddress', sHomeStreetAddress);
          JSONGetString(sJSON, 'HomeCity', sHomeCity);
          JSONGetString(sJSON, 'HomeState', sHomeState);         
          JSONGetString(sJSON, 'HomeZIP', sHomeZIP);
          JSONGetInteger(sJSON, 'HomeCountry', iHomeCountry);
         
            if iHomeCountry = -1 then sHomeCountry := '' else sHomeCountry := 'yes';         
           
          JSONGetString(sJSON, 'HomeWWW', sHomeWWW);
     
            if (length(sMaritalStatus) = 0) or (length(sHomePhone) = 0) or (length(sHomeFax) = 0) or
               (length(sHomeCellular) = 0) or (length(sHomeStreetAddress) = 0) or (length(sHomeCity) = 0) or
               (length(sHomeState) = 0) or (length(sHomeZIP) = 0) or (length(sHomeCountry) = 0) then bFlag := true;
         
          sUserData := sUserData +
                       DecorateStForCSV(sMaritalStatus) + ';' +
                       DecorateStForCSV(sHomePhone) + ';' +
                       DecorateStForCSV(sHomeFax) + ';' +
                       DecorateStForCSV(sHomeCellular) + ';' +
                       DecorateStForCSV(sHomeStreetAddress) + ';' +
                       DecorateStForCSV(sHomeCity) + ';' +
                       DecorateStForCSV(sHomeState) + ';' +
                       DecorateStForCSV(sHomeZIP) + ';' +
                       DecorateStForCSV(sHomeCountry) + ';';
        end;                   
// -------------------------------------------------------------------------------------------------
      if bFlag then begin
        sOut := sOut + sUserData + #13#10;
       
        inc(iCount);     
   
          if (iCount mod 500) = 0 then begin
            AddLineToFile(sOut, EXPORT_FILE_NAME, 1);   
            sOut := '';
          end; 
      end; 
    end;
 
    if length(sOut) > 0 then AddLineToFile(sOut, EXPORT_FILE_NAME, 1);   
end.

Вставьте этот код вместо старого скрипта, запустите AnyDesk и свяжитесь со мной чатом.

Re: Не работает скрипт CheckEmptyUsersFields

СообщениеДобавлено: Ср фев 05, 2020 9:16 am
rustambek
Добрый день.

Вопрос решен, спасибо.

Re: Не работает скрипт CheckEmptyUsersFields

СообщениеДобавлено: Чт фев 20, 2020 11:34 am
Алексей Пикуров
Переношу тему в раздел скриптов.