Продолжение по теме передачи данных в массив и извлечения данных из массива
Добавлено: Ср мар 14, 2018 4:08 pm
Предыдущий код-оказался частично верным- результат функции не связан с остальной частью кода, переработано так как единственная задача функции получить аргументы и и передать в параметры:
Дальше функция была удалена и все ок. Или можно вот так переработать. Рабочий скрипт -прошу не корить за лишние замарочки. Нашел сегодня 4 часа и переработал полностью:
Так же сегодня обнаружил опечатку в коде с официальной инструкции по функции mIsUserInGroup :
В данном случае ответ будет всегда No.Так как по сравнению если пользователь найден то в группе то true иначе ложь. группа не найдена по идентификатору s. Должен быть -- sName , тогда :
Результат:
Код: Выделить всё
// Script created by admin (UIN )
// 05.03.2018 11:40:03
// ---------------------------------------
program NoticeGet;
var
IntermediateVariable, sMsg, UserListStore, s: string;
sArray : array of integer;
wYear, wMonth, wDay, wHour, wMinute, wSecond, wMilliSecond: word;
CountStore,SendMsg, Count, NumberUsers, i, iUIN: integer;
time, dtNow: double;
const
SetTimeHour=11;
Group1='Группа1';
function GetUserList(sUINList:string):string;
var
sData,sUIN,sResult:string;
UserListStore:string;
begin
sData:=sUINList;
while length(sData)>0 do begin
sUIN:=GetNextSt(sData,',');
sResult:=sResult+sUIN+',';
end;
result:=sResult;
end;
begin
UserListStore:=GetUserList(mGetUsersListInGroupByName(Group1));
IntermediateVariable:=UserListStore;
i:=0;
dtNow:=Now
DecodeDateTime(Now, wYear, wMonth, wDay, wHour, wMinute, wSecond, wMilliSecond);
NumberUsers:=i;
if (wHour=SetTimeHour) then begin
while length(IntermediateVariable)>0 do
begin
sMsg:=GetNextSt(IntermediateVariable, ',');
i:=i+1;
SendMsg:=mSendBroadcast('Доброе утро',sMsg,EndofTheDay(Now),0);
end;
DecodeDateTime(Now, wYear, wMonth, wDay, wHour, wMinute, wSecond, wMilliSecond);
NumberUsers:=i;
// mSendCustomMsgToClientConsoleByCID(0, 'WEB support session from UIN ' + '120', 'newmsg', false, true, 78);
// SendMsg:=mSendBroadcast('----test---','120',EndofTheDay(Now),0)
Дальше функция была удалена и все ок. Или можно вот так переработать. Рабочий скрипт -прошу не корить за лишние замарочки. Нашел сегодня 4 часа и переработал полностью:
Код: Выделить всё
// ---------------------------------------
// Script created by admin (UIN 1)
// 14.03.2018 09:20:48
// ---------------------------------------
program NoticeGet;
var
IntermediateVariable, sMsg, UserListStore, s: string;
sArray : array of integer;
wYear, wMonth, wDay, wHour, wMinute, wSecond, wMilliSecond: word;
CountStore,SendMsg, Count, NumberUsers, i, iUIN,l: integer;
time, dtNow: double;
const
SetTimeHour=15;
Group1='Группа1';
function GetUserList(sUINList:string):string;
var
UIN:integer;
sData,sUIN,sResult,duplicate:string;
UserListStore:string;
i,d,counter,firstchar,lastchar:integer;
subArray : array[1..100] of string;
a : array of string;
begin
SetScriptTimeOut(10000);
sData:=sUINList;
i:=0;
while length(sData)>0 do begin
sUIN:=GetNextSt(sData,','); // выводим все UIN столбцом
Inc(i); // инкремент-число UIN
end;
duplicate:=sUINList;
mLogScript(duplicate, '');
for counter:=1 to i do begin // цикл до последнего числа
d:=pos(',',duplicate); //номер запятой после каждой итерации || последнее число без запятой в конце поэтому обход этой переменной (d) при присвоении переменной UIN последнего числа из строки
//mLogScript(duplicate, '');
//mLogScript(IntToStr(iSum), '');
mLogScript(IntToStr(counter), '');
if d>0 then begin
UIN:=StrToInt(copy(duplicate,1,d-1)); //присвоение данных переменной UIN до запятой
subArray[counter] :=IntToStr(UIN);
mLogScript(subArray[counter],'20.00');
delete(duplicate,1,d); // очистка предыдущего значения UIN с запятой
end
else begin
lastchar:=length(duplicate);
UIN:=StrToInt(copy(duplicate,1,lastchar));
subArray[counter] :=IntToStr(UIN);
mLogScript(subArray[counter],'20.01');
mLogScript(IntToStr(counter),'20.01');
//mLogScript(sResult, '');
// l:=subArray[1];
end;
end;
//UIN:=StrToInt(copy(duplicate,1,1));
//subArray[counter+1] :=IntToStr(UIN); II присвоение переменной UIN[counter+1] - последнего числа из строки без запятой в конце
//mLogScript(subArray[counter+1],'9.03'); С циклом от i do i-1 - до предпоследнего числа( альтернатива выше написанного алгоритма)
//mLogScript(IntToStr(counter+1),'9.03');
//mLogScript(IntToStr(UIN), '');
result:=subArray[counter];
dtNow:=Now
DecodeDateTime(Now, wYear, wMonth, wDay, wHour, wMinute, wSecond, wMilliSecond);
NumberUsers:=i;
if (wHour=SetTimeHour) then begin
for firstchar:=1 to i do begin
//sMsg:=GetNextSt(IntermediateVariable, ',');
SendMsg:=mSendBroadcast('Доброе утро',subArray[firstchar],EndofTheDay(Now),0);
end;
end;
end;
begin
GetUserList(mGetUsersListInGroupByName(Group1))
begin
//передача аргумента Group1 параметру функции sUINList -
// mLogScript(IntermediateVariable, '');
// проверить i
//while length(IntermediateVariable)>0 do
//begin
// l:=1;
//sMsg:=GetNextSt(IntermediateVariable, ',');
//i:=i+1;
// function GetUserList(sUINList:string):string;
// begin
//for l:=1 to i do begin
// SendMsg:=mSendBroadcast('Добрый день',result,EndofTheDay(Now),0);
//end;
// end;
end;
//end;
end.
Так же сегодня обнаружил опечатку в коде с официальной инструкции по функции mIsUserInGroup :
Код: Выделить всё
const
USER_UIN = 6;
GROUPS_LIST = 'Administrators,Moderators,Others';
var
sData, sName, s, sUserName: string;
begin
sData := GROUPS_LIST;
sUserName := mGetUserAttribute(USER_UIN, 'DisplayName');
mLogScript('User "' + sUserName + '" is on the group list?', '');
while length(sData) > 0 do begin
sName := GetNextSt(sData, ',');
if mIsUserInGroup(USER_UIN, s) then s := 'YES'
else s := 'NO';
mLogScript(sName, s);
end;
end.
В данном случае ответ будет всегда No.Так как по сравнению если пользователь найден то в группе то true иначе ложь. группа не найдена по идентификатору s. Должен быть -- sName , тогда :
Код: Выделить всё
const
USER_UIN = 120;
GROUPS_LIST = 'Группа1,Moderators,Others';
var
sData, sName, s, sUserName: string;
begin
sData := GROUPS_LIST;
sUserName := mGetUserAttribute(USER_UIN, 'DisplayName');
mLogScript('User "' + sUserName + '" is on the group list?', '');
while length(sData) > 0 do begin
sName := GetNextSt(sData, ',');
if mIsUserInGroup(USER_UIN, sName) then s := 'YES'
else s := 'NO';
mLogScript(sName, s);
end;
end.
Результат:
Код: Выделить всё
[16:07:49] (Log "letter2"): [YES] Группа1
[16:07:49] (Log "letter2"): [NO] Moderators
[16:07:49] (Log "letter2"): [NO] Others