Список, многопоточность

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

ktokto

Client
Регистрация
17.02.2013
Сообщения
6
Реакции
0
Баллы
0
Добрый день.

Есть проект, который обрабатывает таблицу, которая берется из файла (csv) на локальном диске.

tabl.jpg

Есть два списка которые тоже привязаны к файлам на локальном диске.

kei.png

rez.png

Из первого списка "Ключ" бралась первая строка, заносилась в переменную "KEI" и удалялась.

Значение из переменной заносилось в конец списка "Результат".

v rez origin.jpg

Дальше переменная "KEI" сравнивается с данными в таблице и нужные данные из таблицы заносятся в список "Результат".

v rez KEI3.jpg

Дальше бралась вторая строка из списка ключ. Дальше третья и так пока не закончатся строки. В итоге список результат принимал следующий вид:

Строка из списка "Ключ" 1
Нужные данные из таблицы по Первой строке из списка "Ключ" 1
Нужные данные из таблицы по Первой строке из списка "Ключ" 2
Нужные данные из таблицы по Первой строке из списка "Ключ" 3
Нужные данные из таблицы по Первой строке из списка "Ключ" 4

Строка из списка "Ключ" 2
Нужные данные из таблицы по Второй строке из списка "Ключ" 1
Нужные данные из таблицы по Второй строке из списка "Ключ" 2
Нужные данные из таблицы по Второй строке из списка "Ключ" 3

Строка из списка "Ключ" 3
Нужные данные из таблицы по Третьей строке из списка "Ключ" 1
Нужные данные из таблицы по Третьей строке из списка "Ключ" 2
Нужные данные из таблицы по Третьей строке из списка "Ключ" 3
Нужные данные из таблицы по Третьей строке из списка "Ключ" 4
Нужные данные из таблицы по Третьей строке из списка "Ключ" 5

и т.д.

Но это работает только если один поток. Если "включаю многопоточность", то все в списке "Результат" перемешивается.
Как-то так получается:

Строка из списка "Ключ" 1
Строка из списка "Ключ" 2
Строка из списка "Ключ" 3
Нужные данные из таблицы по Второй строке из списка "Ключ" 1
Нужные данные из таблицы по Третьей строке из списка "Ключ" 5
Нужные данные из таблицы по Третьей строке из списка "Ключ" 3
Нужные данные из таблицы по Третьей строке из списка "Ключ" 4
Нужные данные из таблицы по Первой строке из списка "Ключ" 1
Нужные данные из таблицы по Второй строке из списка "Ключ" 2
Нужные данные из таблицы по Второй строке из списка "Ключ" 3
Нужные данные из таблицы по Первой строке из списка "Ключ" 3
Нужные данные из таблицы по Третьей строке из списка "Ключ" 2
Нужные данные из таблицы по Третьей строке из списка "Ключ" 1
Нужные данные из таблицы по Первой строке из списка "Ключ" 4
Нужные данные из таблицы по Первой строке из списка "Ключ" 2

Подскажите как при нескольких потоках записывать в список "Результат", который привязан к файлу на диске, чтобы было как при работе одного потока.

rez.png

Т.е. так:

Строка из списка "Ключ" 1
Нужные данные из таблицы по Первой строке из списка "Ключ" 1
Нужные данные из таблицы по Первой строке из списка "Ключ" 2
Нужные данные из таблицы по Первой строке из списка "Ключ" 3
Нужные данные из таблицы по Первой строке из списка "Ключ" 4

Строка из списка "Ключ" 2
Нужные данные из таблицы по Второй строке из списка "Ключ" 1
Нужные данные из таблицы по Второй строке из списка "Ключ" 2
Нужные данные из таблицы по Второй строке из списка "Ключ" 3

Строка из списка "Ключ" 3
Нужные данные из таблицы по Третьей строке из списка "Ключ" 1
Нужные данные из таблицы по Третьей строке из списка "Ключ" 2
Нужные данные из таблицы по Третьей строке из списка "Ключ" 3
Нужные данные из таблицы по Третьей строке из списка "Ключ" 4
Нужные данные из таблицы по Третьей строке из списка "Ключ" 5
 
Значение из переменной заносилось в конец списка "Результат".

Дальше переменная "KEI" сравнивается с данными в таблице и нужные данные из таблицы заносятся в список "Результат".

Нужно это выполнять одним действием. Чтобы между ними ничего лишнего не вклинилось.
 
Возможно, что Вы понимаете под понятием "Список привязан к файлу" вот это http://clip2net.com/s/5AIrtB
Если это так, то у Вас список не привязан к файлу. Для привязки есть отдельный экшн "Операции над списком -> Привязать список к файлу".
 
Нет.

Возможно, что Вы понимаете под понятием "Список привязан к файлу" вот это http://clip2net.com/s/5AIrtB

В этом случае список также привязан к файлу. Только статически, не динамически.
 
Что именно? Список или привязан к файлу, или не привязан. то есть существует только в памяти постера.
 
Нужно это выполнять одним действием. Чтобы между ними ничего лишнего не вклинилось.

Не понимаю, как это выполнять одним действием? Там много IF, поочередно перебираются строки, постоянно сравнивается, то что взяли удаляется (не строчки, а значение ячечек). Может можно какой-то временный список для каждого потока делать и оттуда уже скопом в финальный список заносить?

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

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

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