Работа с аккаунтам в таблице

one

Client
Регистрация
22.09.2015
Сообщения
6 793
Благодарностей
1 264
Баллы
113
так а зачем лок со списком? просто привяжи список к файлу и бери с удалением, вот и весь лок... я с локами так себе, тож не очень понимаю их )
Многопоток чтоб его...
 

backoff

Client
Регистрация
20.04.2015
Сообщения
5 931
Благодарностей
6 389
Баллы
113
  • Спасибо
Реакции: TIIGR и Gulid

doc

Client
Регистрация
30.03.2012
Сообщения
8 613
Благодарностей
4 601
Баллы
113
если в список/таблицу в многопотоке осуществляется запись - лок необходим. Если только чтение - можно пренебречь. Однако всегда есть шанс, что шаб изменится и тогда придётся делать правки во многих местах. Так что лучше всё же не пренебрегать
 

backoff

Client
Регистрация
20.04.2015
Сообщения
5 931
Благодарностей
6 389
Баллы
113
  • Спасибо
Реакции: TIIGR и Gulid

doc

Client
Регистрация
30.03.2012
Сообщения
8 613
Благодарностей
4 601
Баллы
113
o_O
реально ниразу не юзал лок для списков и таблиц... не было проблем, тьфу тьфу тьфу ...
в продукты на продажу всё же стоит внести. Не у всех может оказаться твой запас везения)
 

one

Client
Регистрация
22.09.2015
Сообщения
6 793
Благодарностей
1 264
Баллы
113
Вобщем я сочинил такую штуку. Может кому еще пригодится.

Код:
lock(SyncObjects.TableSyncer){

// берем первую строку с удалением и кладем в переменную
   project.Variables["VariableName"].Value = project.Lists["ListName"][0].Trim();
   project.Lists["ListName"].RemoveAt(0);
}

// тут что-то делаем с полученными из списка данными

// возвращаем строку в конец списка
lock(SyncObjects.TableSyncer){
    string proxy = project.Variables["VariableName"].Value;
    project.Lists["ListName"].Add(proxy);
}
 
Последнее редактирование:
  • Спасибо
Реакции: mux76

one

Client
Регистрация
22.09.2015
Сообщения
6 793
Благодарностей
1 264
Баллы
113
И еще один момент. Почему то не берет строку если в ней имеются в конце пустые две ячейки, без значений. Если в них что то вставить. то все в порядке.
И все же... Почему, если в последней колонке нет данных (пусто), то данный сниппет получает данные, удаляет строку и выходит с ошибкой. Если вписать в ячейку что то, например 0, то все ок.
Выполнение действия CSharp OwnCode Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index
 

one

Client
Регистрация
22.09.2015
Сообщения
6 793
Благодарностей
1 264
Баллы
113
  • // возвращаем строку в конец списка
  • lock(SyncObjects.TableSyncer){
  • project.Tables["mytable"].AddRow(project.Variables["login"].Value+"\t"+project.Variables["password"].Value);
}
Подскажите, как реализовать данное действие с поиском строки по таблице на соответсвие переменной {-Variable.USER_NAME-} и вставлять в нее данные из переменных?
 

backoff

Client
Регистрация
20.04.2015
Сообщения
5 931
Благодарностей
6 389
Баллы
113

one

Client
Регистрация
22.09.2015
Сообщения
6 793
Благодарностей
1 264
Баллы
113
Нужно взять из переменной {-Variable.USER_NAME-} значение, найти строку с этим значением в таблице и вставить в эту строку данные из следующих переменных {-Variable.USER_VARIABLE1-}, {-Variable.USER_VARIABLE2-}, {-Variable.USER_VARIABLE3-}
 

one

Client
Регистрация
22.09.2015
Сообщения
6 793
Благодарностей
1 264
Баллы
113
Если подскажете, офигенная вещь получится на мой взгляд я думаю.
 

backoff

Client
Регистрация
20.04.2015
Сообщения
5 931
Благодарностей
6 389
Баллы
113
тут посложнее, так как нет для этого стандартных решений.
но мне как-то тоже самое надо было, и поэтому есть сниппет
думаю разберешься, не сложно

Код:
IZennoTable table = project.Tables["НАЗВАНИЕ ТАБЛИЦЫ ИЗ КОТОРОЙ НАДО ВЗЯТЬ"];
string str = project.Variables["НАЗВАНИЕ ПЕРЕМЕННОЙ КОТОРУЮ НАДО ВЗЯТЬ"].Value;
string row;
for (int i = 0; i < table.RowCount; i++) {
    row = string.Join("", table.GetRow(i));
    if (row.Contains(str)) {
        //table.DeleteRow(i); i--; // раскомментировать, если строку нужно брать с удалением
        return i;
    }
}



логика такая:
1. берем сначала текст в переменную, то что надо найти, содержимое должно быть уникальным
2. используем сниппет со своими переменными, получаем номер строки
3. берем данные по номеру строки

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

логика такая:
1. берем сначала текст в переменную, то что надо найти, содержимое должно быть уникальным
2. удаляем строку с нужной переменной
3. записываем в конец новую строчку с нужными данными

PS\ работа с таблицами, скудна в зенке, только если пилить костыли...
 

Вложения

Последнее редактирование:
  • Спасибо
Реакции: Mikhail B., luk911 и one

one

Client
Регистрация
22.09.2015
Сообщения
6 793
Благодарностей
1 264
Баллы
113
Т.е. ты берешь, ищешь в таблице значение и потом по этому значению получаешь строку? А мне надо положить в которой содержится искомое значение.
 

one

Client
Регистрация
22.09.2015
Сообщения
6 793
Благодарностей
1 264
Баллы
113
Не совсем то, что надо. Тут важна реализация на C# что бы лочить процесс.
 

backoff

Client
Регистрация
20.04.2015
Сообщения
5 931
Благодарностей
6 389
Баллы
113
Т.е. ты берешь, ищешь в таблице значение и потом по этому значению получаешь строку?
да.

но я уже делаю по другому, просто удаляю строку с нужной записью, например логин, и перезаписываю ее уже по новой... так проще и гемора меньше, но единственно что запись в конец улетает, но мне это не мешает, для меня даже плюс это
 
  • Спасибо
Реакции: one

backoff

Client
Регистрация
20.04.2015
Сообщения
5 931
Благодарностей
6 389
Баллы
113
при работе с таблицами в много поток, локом не пользуюсь. работает без локов все
 

one

Client
Регистрация
22.09.2015
Сообщения
6 793
Благодарностей
1 264
Баллы
113
Вообщем то что я описал делается костыльно в работе с таблицами?
 

backoff

Client
Регистрация
20.04.2015
Сообщения
5 931
Благодарностей
6 389
Баллы
113

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)