Я в растерянности. Работа с файлами списков.

  • Автор темы Автор темы one
  • Дата начала Дата начала

one

Client
Регистрация
22.09.2015
Сообщения
7 019
Реакции
1 314
Баллы
113
Давно не работал со списками. Понадобилось быстро написать шаблон. Коротко о функционале:

1. Со страницы получаем список URL'ов и кладем их в список А.
2. Берем из списка А первый URL с удаление ищем его в списке Б и если его там нет, обрабатываем.
3. Обработанный URL кладем в список Б.
4. Возвращаемся к п.2.
5. Когда список А пуст, заканчиваем работу шаблона.

Оба списка привязываю экшеном к файлу.

Всем известна проблема что данные в списки пишутся с задержкой. Так вот, обратил внимание что не всегда данные попадают в списки, где то они пропадают. Приходиться запускать шаблон по нескольку раз что бы он корректно обработал все URL и записал их в список.

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

Это как то лечится?

Версия постера 5.17.1
 
Только сегодня был баг со списками в 16.2.
Был список 2 и список 3. Я выделил подсписок по регулярки из 2 в третий. Но третий оказывался пустой.
Открыл посмотреть второй в маленьком окне показал одни строки, в большом окне другие. Список был привязан через переменную во входных. Закрывал PM раза три, ничего не помогало. В итоге психанул и прявязал список напрямую без входных, и сам список переименовал, перезагрузил PM в очередной раз и о чудо. Заработало.
 
Ну вот тоже самое и у меня. Данные в списки заносятся как то хаотично. При одной итерации заносятся, при последующей нет.
прявязал список напрямую без входных,
С прямой привязкой получше, но тоже иногда проскакивает мимо.

Если с прямой привязкой данные в список заносятся лучше то для чего существует экшен Привязать к файлу у списков и таблиц?
 
Да хз не знал, что лучше так. Вроде есть перменная, в ней путь. этот путь прописан в списке. Все же логично как 2х2.
 
Вот головоломка. Сколько людей столько и мнений. :bw:

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

upload_2018-4-24_9-6-40.png
 
Самый 100% способ, это нажать 3 галки и указать файл. Список должен быть привязан один раз, в формате utf-8 и закрыт во время выполнения. Сохраняем, перезапускаем. Все.
 
  • Оценить
Реакции: one
И так... Давайте подведем итоги нашей с вами дискуссии. Для корректного занесения данных в список или таблицу во много потоке выполняем следующие два пункта.
  1. Привязываем список к файлу.
  2. В настройках списка (таблицы) устанавливаем все три галки и указываем путь к файлу.
Я правильно вас понял?
 
Вот головоломка. Сколько людей столько и мнений. :bw:

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

Посмотреть вложение 29240
Вот так стоит у меня
2018-04-24_092215.png
В нужном месте я привязываю файл к списку и работаю с ним,данные не пересекаются,дубли не пишутся
 
  • Оценить
Реакции: one
Достаточно его привязать в начале работы шаблона?
Если имя файла и путь его известен и не изменим,то зачем танцы с бубном?Просто пропиши полный путь и все.
Если работаешь со списком/таблицей на c# то не забывай лочить тогда все будет записываться и браться как надо.
 
Ну вот судя по всему надо переходить на это решение.
Вот так более правильней
var list_1 = project.Lists["Список 1"];
var list_2 = project.Lists["Список 2"];
//
lock(SyncObjects.ListSyncer) {
for(int i=0;i<list_1.Count;i++){
string url = list_1[0]; //берем первую строку
list_1.RemoveAt(0);//удаляем первую строку
if(!list_2.Contains(url)){ //проверяем есть ли в списке
return url;//если нет то вернем url
}
}
}
throw new Exception("Закончился список");
 
Последнее редактирование:
  • Оценить
Реакции: one
Постоянно работаю с списками и никаких глюков честно говоря не замечал
Привязку всегда делаю в c# т.е сразу не указываю файл

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

Думаю есть какая-то ошибка в логике самого шаблона ...

p.s я все еще сижу на 5.11.4.0, но насколько я помню changelog'и роде бы в новых версиях работа со списками никак не затрагивалась ...
 
  • Оценить
Реакции: orka13, one и ZX
Можно увидеть решение?

все делается одной строкой
Код:
Развернуть Свернуть Копировать
project.Lists["result"].Bind(project.Variables["project_files_dir"].Value+"result.txt");

p.s в настройках кубика должны стоять галки
- загружать из файла
- сохранять изменения списка в файл
там где указывается файл оставить пустую строку

p.p.s очень сомневаюсь что смена привязки с кубика на c# что-то изменит в данном конкретном случае ... ошибка судя по всему где-то в другом месте
 
  • Оценить
Реакции: orka13 и one
При работе со списками надо учитывать еще один момент: во время выполнения в ЗП нельзя этот проект выполнять в ПМ так как он может пересохранить свою версию списка, которая никак не синхронизирована с ЗП
 
  • Оценить
Реакции: orka13

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