Форум программистов, компьютерный форум, киберфорум
Ruby
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
0 / 0 / 0
Регистрация: 16.02.2014
Сообщений: 12

Как сделать, чтобы при точном совпадении всех атрибутов entity в таблицу печаталась одна строка с количеством этих entity ?

16.02.2014, 14:31. Показов 2689. Ответов 23
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В программировании я всего месяц – потребовалось написать плагин на RUBY. Написал , все работает. Но хочется «красоты». Помогите дописать…
Имеется фрагмент кода (для выделенных элементов (entity) получает и печатает в таблицу их атрибуты :

Ruby
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
file.puts("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>")
    file.puts("<data>") 
    file.puts("<parts>") 
 
  for i in 0..selection.count - 1
    entity  = selection[i]
      name_label = entity.get_attribute ("dynamic_attributes","name_label",0).to_s    # для entity [i] получает имя entity
      length = entity.get_attribute ("dynamic_attributes","length",0).to_s            # для entity [i] получает длину entity 
      width = entity.get_attribute ("dynamic_attributes","width",0).to_s              # для entity [i] получает ширину entity  
      thick = entity.get_attribute ("dynamic_attributes","thick",0).to_s              # для entity [i] получает толщину entity 
      area_round = entity.get_attribute ("dynamic_attributes","area_round",0).to_s    # для entity [i] получает площадь entity 
      file.puts("<row>")     
              file.puts("<name>" + name_label.to_s + "</name>")                       # для entity [i] печатает в таблицу имя entity 
              file.puts("<quantity>1</quantity>")                                     # для entity [i] печатает в таблицу кол-во entity 
              file.puts("<length>" + length.to_s  + "</length>")                      # для entity [i] печатает в таблицу длину entity 
              file.puts("<width>" + width.to_s  + "</width>")                         # для entity [i] печатает в таблицу ширину entity 
              file.puts("<thick>" + thick.to_s  + "</thick>")                         # для entity [i] печатает в таблицу толщину entity 
              file.puts("<area>" + area_round.to_s + "</area>")                       # для entity [i] печатает в таблицу площадь entity 
       file.puts("</row>")
  end      
     file.puts("</parts>") 
   file.puts("</data>")
  file.close
Код работает, НО ...

Как сделать, чтобы при точном совпадении всех атрибутов entity (имени, длины, ширины, толщины и площади) в таблицу печаталась одна строка с атрибутами и количеством (quantity) этих entity. Сейчас строки выводятся для каждого entity (в колонку "количество" печатается quantity=1)
сам не смогу, знаний не хватает (в начале поста про месяц не шутил, а код нужен)

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

Добавлено через 1 час 22 минуты
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
16.02.2014, 14:31
Ответы с готовыми решениями:

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

@OneToOne or @ManyToOne on `my entity#1` references an unknown entity `my entity#2`
Привет всем! У меня появилась такая ошибка когда я работаю с двумя базами, именно когда делаю save в другую базу сущность первой, ...

Сделать так, чтобы каждая строка печаталась на новом листе
Добрый день,форумчане. У меня есть массив строк, который надо напечатать. Как мне сделать так, чтобы каждая строка печаталась на новом...

23
 Аватар для MpaKus
227 / 225 / 23
Регистрация: 30.01.2013
Сообщений: 720
16.02.2014, 16:50
не понятно зачем было изобретать свой велосипед если к Ruby есть замечательный XML Builder, поставить и спокойно создавать валидный xml.
0
0 / 0 / 0
Регистрация: 16.02.2014
Сообщений: 12
16.02.2014, 17:35  [ТС]
Цитата Сообщение от MpaKus Посмотреть сообщение
не понятно зачем было изобретать свой велосипед если к Ruby есть замечательный XML Builder, поставить и спокойно создавать валидный xml.
ответ на это в первой строчке моего поста...
по теме ничего не посоветуете ?
0
 Аватар для MpaKus
227 / 225 / 23
Регистрация: 30.01.2013
Сообщений: 720
16.02.2014, 17:39
По теме раз хочется красоты, сотрите этот код, подставьте гем - Builder и сделайте на нем, будет правильно и красиво.
0
0 / 0 / 0
Регистрация: 16.02.2014
Сообщений: 12
16.02.2014, 18:52  [ТС]
Цитата Сообщение от MpaKus Посмотреть сообщение
По теме раз хочется красоты, сотрите этот код, подставьте гем - Builder и сделайте на нем, будет правильно и красиво.
я не могу этого сделать в программе Sketchup для которой плагин ограниченная версия RUBY если я её исправлю - плагин не будет работать на других компьютерах.
я так понимаю что вместо того чтобы печатать в таблицу значения в виде:
|Имя|количество|длина|ширина|толщина|пло щадь |
мне нужно собрать для каждого entity массив значений (Имя, длина, ширина, толщина, площадь )
потом их сравнить и если они совпадают для разных entity, то увеличит значение quantity на 1
если нет просто запомнить, а потом все вывести в таблицу.
знаний не хватает написать код.
0
2 / 2 / 0
Регистрация: 15.11.2013
Сообщений: 20
17.02.2014, 13:50
...
0
2 / 2 / 4
Регистрация: 17.02.2014
Сообщений: 18
17.02.2014, 14:10
Конкретно с вашей предметной областью (sketchup) я не знаком. Предполагаю, что есть более изящные пути решения вопроса. Ну да ладно. Перейдем конкретно к вашей просьбе
мне нужно собрать для каждого entity массив значений (Имя, длина, ширина, толщина, площадь )
потом их сравнить и если они совпадают для разных entity, то увеличит значение quantity на 1
если нет просто запомнить, а потом все вывести в таблицу.
знаний не хватает написать код.
Давайте собранные вами данные будем складывать в массив, а получившийся массив в заранее объявленный массив result
(я буду опускать часть вашего кода, сориентируетесь...)
Ruby
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#...
 
result = []
 
#... 
for i in 0..selection.count - 1
    entity  = selection[i]
      name_label = entity.get_attribute ("dynamic_attributes","name_label",0).to_s
      length = entity.get_attribute ("dynamic_attributes","length",0).to_s 
      width = entity.get_attribute ("dynamic_attributes","width",0).to_s
      thick = entity.get_attribute ("dynamic_attributes","thick",0).to_s
      area_round = entity.get_attribute ("dynamic_attributes","area_round",0).to_s
 
      result << [name_label, length, width, thick, area_round]
end
#...
На этом цикл можно завершить.

Теперь нам нужно посчитать сколько раз повторяются элементы массива result. Для этого воспользуемся итератором и стандартным типом данных hash. Хешу в ruby можно задать значение по умолчанию, воспользуемся этим.
Ruby
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#...
  for i in 0..selection.count - 1
    entity  = selection[i]
      name_label = entity.get_attribute ("dynamic_attributes","name_label",0).to_s
      length = entity.get_attribute ("dynamic_attributes","length",0).to_s
      width = entity.get_attribute ("dynamic_attributes","width",0).to_s 
      thick = entity.get_attribute ("dynamic_attributes","thick",0).to_s
      area_round = entity.get_attribute ("dynamic_attributes","area_round",0).to_s
 
      result << [name_label, length, width, thick, area_round]
 
  end
 
  hash_result = each_with_object(Hash.new 0) do |elem, counter|
    counter[word] += 1
  end
#...
Теперь у нас в переменной hash_result хранятся наши данные в таком виде {[a, b, c, d]: 2} где [a, b, c, d] массив с данными "одной строки ваше выборки" является ключом, а 2 количество "раз повторов" и по совместительству значение.
Остался только вывод. Работу с xml оставим на вашей совести ) и на ваше усмотрение
Ruby
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#...
  end
 
  hash_result = each_with_object(Hash.new 0) do |elem, counter|
    counter[word] += 1
  end
 
file.puts("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>")
    file.puts("<data>") 
    file.puts("<parts>")
 
    hash_result.each do |key, value|
      file.puts("<row>")
        file.puts("<name>" + key[0] + "</name>")
        file.puts("<quantity>" + value + "</quantity>")
        file.puts("<length>" + key[1]  + "</length>")
        file.puts("<width>" + key[2]  + "</width>")
        file.puts("<thick>" + key[3]  + "</thick>")
        file.puts("<area>" + key[4] + "</area>")
      file.puts("<row>")
    end
 
     file.puts("</parts>") 
   file.puts("</data>")
  file.close
Как то так... Не знакомые конструкции языка нужно забить в google и почитать ) Как вы сами понимаете проверить код мне не на чем, так что отладка падает на ваши плечи.

Кликните здесь для просмотра всего текста

Ruby
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
result = []
 
for i in 0..selection.count - 1
  entity  = selection[i]
  name_label = entity.get_attribute ("dynamic_attributes","name_label",0).to_s
  length = entity.get_attribute ("dynamic_attributes","length",0).to_s 
  width = entity.get_attribute ("dynamic_attributes","width",0).to_s
  thick = entity.get_attribute ("dynamic_attributes","thick",0).to_s
  area_round = entity.get_attribute ("dynamic_attributes","area_round",0).to_s
 
  result << [name_label, length, width, thick, area_round]
end
 
hash_result = each_with_object(Hash.new 0) do |elem, counter|
  counter[word] += 1
end
 
file.puts("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>")
file.puts("<data>") 
file.puts("<parts>")
 
hash_result.each do |key, value|
  file.puts("<row>")
  file.puts("<name>" + key[0] + "</name>")
  file.puts("<quantity>" + value + "</quantity>")
  file.puts("<length>" + key[1]  + "</length>")
  file.puts("<width>" + key[2]  + "</width>")
  file.puts("<thick>" + key[3]  + "</thick>")
  file.puts("<area>" + key[4] + "</area>")
  file.puts("<row>")
end
 
file.puts("</parts>") 
file.puts("</data>")
file.close


Добавлено через 18 минут
В строку
Ruby
1
hash_result = each_with_object(Hash.new 0) do |elem, counter|
закралась очепятка.

Верно так
Ruby
1
hash_result = result.each_with_object(Hash.new 0) do |elem, counter|
0
0 / 0 / 0
Регистрация: 16.02.2014
Сообщений: 12
17.02.2014, 19:35  [ТС]
код работает до 14 строки ... до неё в массив result записываются данные (я поставил перед 14 строкой проверку с выводом значений result[i] и длины, ширины и т.д. ... остальные строки до конца закомментировал)
проверка последовательно выводит эти данные (все нормально)

Но после строки 14
Ruby
1
hash_result = result.each_with_object(Hash.new 0) do |elem, counter|
выполнение прекращается....
проверял также: за 14 строкой поставил
Ruby
1
UI.messagebox ("ура, работает !")
и сообщение не выводится.
Подскажите в чем проблема ?
 Комментарий модератора 
Прикрепляйте файлы и изображения к сообщениям.
https://www.cyberforum.ru/abou... post594251
0
2 / 2 / 4
Регистрация: 17.02.2014
Сообщений: 18
17.02.2014, 20:38
Там очепятка
Ruby
1
2
3
hash_result = each_with_object(Hash.new 0) do |elem, counter|
  counter[word] += 1
end
нужно исправить на
Ruby
1
2
3
hash_result = each_with_object(Hash.new 0) do |elem, counter|
  counter[elem] += 1
end
Для лучшего понимания давайте заменим этот кусок на следующий
Ruby
1
2
3
4
hash_result = Hash.new(0)
result.each do |elem|
  hash_result[elem] += 1
end
0
0 / 0 / 0
Регистрация: 16.02.2014
Сообщений: 12
17.02.2014, 22:15  [ТС]
olegmlsn, Благодарю вас за помощь исправил на такой код :
Ruby
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
file.puts("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>")
file.puts("<data>") 
file.puts("<parts>")
for i in 0..selection.count - 1
entity = selection[i]
recursive_count(selection[i])   # вызов метода получения массива result
hash_result = Hash.new(0)
result.each do |elem|
  hash_result[elem] += 1
end
hash_result.each do |key, value|
  file.puts("<row>")
  file.puts("<name>" + key[0] + "</name>")
  file.puts("<quantity>" + value + "</quantity>")
  file.puts("<length>" + key[1]  + "</length>")
  file.puts("<width>" + key[2]  + "</width>")
  file.puts("<thick>" + key[3]  + "</thick>")
  file.puts("<area>" + key[4] + "</area>")
  file.puts("<row>")
end
end
file.puts("</parts>")
file.puts("</data>")
file.close
def recursive_count (selection[i])     # вычисление массива result
result = []
for i in 0..selection.count - 1
      name_label = entity.get_attribute ("dynamic_attributes","name_label",0).to_s    # для entity [i] получает имя entity
      length = entity.get_attribute ("dynamic_attributes","length",0).to_s            # для entity [i] получает длину entity 
      width = entity.get_attribute ("dynamic_attributes","width",0).to_s              # для entity [i] получает ширину entity  
      thick = entity.get_attribute ("dynamic_attributes","thick",0).to_s              # для entity [i] получает толщину entity 
      area_round = entity.get_attribute ("dynamic_attributes","area_round",0).to_s    # для entity [i] получает площадь entity 
  result << [name_label, length, width, thick, area_round]                            # заполнение массива result
end
я каюсь что не написал сразу, что вычисление и печать вызываются из другой функции.
Так вот внутри метода recursive_count все работает я получаю массив result.
Но он не передается для вычисления hash_result и печати таблицы.
я каюсь что не написал сразу, что вычисление и печать вызываются из другой функции.
Так вот внутри метода recursive_count все работает я получаю массив result.
Но он не передается для вычисления hash_result и печати таблицы.
Буду признателен если вы найдете время исправить ошибки (впрочем я также пойму ваш отказ - тяжело работать с дилетантами).
0
2 / 2 / 4
Регистрация: 17.02.2014
Сообщений: 18
18.02.2014, 10:15
Лучший ответ Сообщение было отмечено goga63 как решение

Решение

Начнем пожалуй с метода (или функции, как угодно)
Ruby
1
2
3
4
5
6
7
8
9
10
def recursive_count (selection[i])     # вычисление массива result
result = []
for i in 0..selection.count - 1
      name_label = entity.get_attribute ("dynamic_attributes","name_label",0).to_s    # для entity [i] получает имя entity
      length = entity.get_attribute ("dynamic_attributes","length",0).to_s            # для entity [i] получает длину entity 
      width = entity.get_attribute ("dynamic_attributes","width",0).to_s              # для entity [i] получает ширину entity  
      thick = entity.get_attribute ("dynamic_attributes","thick",0).to_s              # для entity [i] получает толщину entity 
      area_round = entity.get_attribute ("dynamic_attributes","area_round",0).to_s    # для entity [i] получает площадь entity 
  result << [name_label, length, width, thick, area_round]                            # заполнение массива result
end
Параметр указанный в определении метода не обязан иметь одинаковое название с аргументом который будет в метод передаватся при выполнении.
Ruby
1
def recursive_count (selection[i])
selection[i] заменить на что нибудь более удобо-читаемое.

Методы имеют области видимости. За пределами метода переменной result не существует.
Теперь возвращаемое значение. Метод возвращает результат последней строки кода или то что вы возвращаете с помощью return. Перепишем метод и разместим его определение выше вызова.
Ruby
1
2
3
4
5
6
7
8
9
def recursive_count (something)     # вычисление массива result
  result = []
  name_label = something.get_attribute ("dynamic_attributes","name_label",0).to_s    
  length = something.get_attribute ("dynamic_attributes","length",0).to_s            
  width = something.get_attribute ("dynamic_attributes","width",0).to_s               
  thick = something.get_attribute ("dynamic_attributes","thick",0).to_s              
  area_round = something.get_attribute ("dynamic_attributes","area_round",0).to_s    
  return [name_label, length, width, thick, area_round]                            
end
Плюс мелкие замечания
Ruby
1
2
3
for i in 0..selection.count - 1
entity = selection[i]
recursive_count(selection[i])
Для чего вы присваиваете entity = selection[i], а в метод по прежнему передаете selection[i]?

Ruby
1
2
3
hash_result = Hash.new(0)
result.each do |elem|
  hash_result[elem] += 1
Засунули в цикл. На каждой итерации hash_result обнуляется.

К сожалению я не могу пройтись по всем замечаниям.
Вам нужно учить ruby, полноценно с книгами или другими материалами. Лишним он вам не будет.
Установите ruby локально пробуйте части своего кода выполнять в irb.

Вот что у меня получилось
Ruby
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
def recursive_count (something)
  name_label = something.get_attribute ("dynamic_attributes","name_label",0).to_s    
  length = something.get_attribute ("dynamic_attributes","length",0).to_s            
  width = something.get_attribute ("dynamic_attributes","width",0).to_s               
  thick = something.get_attribute ("dynamic_attributes","thick",0).to_s              
  area_round = something.get_attribute ("dynamic_attributes","area_round",0).to_s    
  return [name_label, length, width, thick, area_round]                            
end
 
result = []
 
file.puts("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>")
file.puts("<data>") 
file.puts("<parts>")
 
for i in 0..selection.count - 1
  entity = selection[i]
  result << recursive_count(entity)
end
 
hash_result = Hash.new(0)
result.each do |elem|
  hash_result[elem] += 1
end
 
hash_result.each do |key, value|
  file.puts("<row>")
  file.puts("<name>" + key[0] + "</name>")
  file.puts("<quantity>" + value + "</quantity>")
  file.puts("<length>" + key[1]  + "</length>")
  file.puts("<width>" + key[2]  + "</width>")
  file.puts("<thick>" + key[3]  + "</thick>")
  file.puts("<area>" + key[4] + "</area>")
  file.puts("<row>")
end
 
file.puts("</parts>")
file.puts("</data>")
file.close
0
0 / 0 / 0
Регистрация: 16.02.2014
Сообщений: 12
18.02.2014, 12:37  [ТС]
olegmlsn, Спасибо вам за терпеливое и подробное объяснение.

...наверное последний вопрос
возможно ли передать уже заполненный массив result в другой метод в качестве аргумента ?
"...При передаче аргументов в метод в виде массива мы также должны использовать оператор *, который превращает массив в набор значений..."

например возможен ли такой код :
Ruby
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
def something_metod (*result)      # имя метоа выбрано для примера, методу передается массив result
hash_result = Hash.new(0)
result.each do |elem|
  hash_result[elem] += 1
end
hash_result.each do |key, value|
  file.puts("<row>")
  file.puts("<name>" + key[0] + "</name>")
  file.puts("<quantity>" + value + "</quantity>")
  file.puts("<length>" + key[1]  + "</length>")
  file.puts("<width>" + key[2]  + "</width>")
  file.puts("<thick>" + key[3]  + "</thick>")
  file.puts("<area>" + key[4] + "</area>")
  file.puts("<row>")
end
end
0
2 / 2 / 4
Регистрация: 17.02.2014
Сообщений: 18
18.02.2014, 13:29
Лучший ответ Сообщение было отмечено goga63 как решение

Решение

Передача массива целиком будет работать и без звездочки. Звездочка, если я не ошибаюсь, для произвольного количества аргументов
Ruby
1
2
3
def test(*multiarg)
  multiarg.each { |elem| puts elem}
end
По коду который привели. Вы наступаете на те же грабли... У методов есть область видимости, он не знает о переменной file, которую вы создали вне метода. Нужно либо делать file глобальной (не очень хорошая практика), либо передовать file в метод вторым аргументом.

А откуда цитата?
"...При передаче аргументов в метод в виде массива мы также должны использовать оператор *, который превращает массив в набор значений..."
0
0 / 0 / 0
Регистрация: 16.02.2014
Сообщений: 12
18.02.2014, 14:36  [ТС]
Цитата отсюда :
http://rubydev.ru/2011/04/ruby... ode-block/

правильно ли я понял , что пи такой записи метод test получит массив result и сможет с ним работать :
Ruby
1
2
3
4
5
6
7
8
result = []
for i in 0..selection.count - 1
  entity = selection[i]
  result << recursive_count(entity)    # собираем массив
end
def test(*result)
  result.each { |elem| puts elem}        # выполняем действия с массивом
end

или если два метода друг за другом в первом получаем result во втором обрабатывает (код условный)
Ruby
1
2
3
4
5
6
7
8
9
10
def test1
result = []
for i in 0..selection.count - 1
  entity = selection[i]
  result << recursive_count(entity)    # собираем массив
end
end
def test(*result)
  result.each { |elem| puts elem}        # выполняем действия с массивом
end
или нужно внутри метода test обратиться к test1 ?
0
2 / 2 / 4
Регистрация: 17.02.2014
Сообщений: 18
18.02.2014, 14:54
равильно ли я понял , что пи такой записи метод test получит массив result и сможет с ним работать :
Звездочка не нужна в данном случае. У вас в коде только определение метода. Нужен еще вызов в котором вы передадите result методу
Ruby
1
2
3
4
5
6
7
8
9
10
11
12
13
result = []
for i in 0..selection.count - 1
  entity = selection[i]
  result << recursive_count(entity)    # собираем массив
end
 
# Это только определение метода, если к методу не обращатся он ничего не делает
def test(result)
  result.each { |elem| puts elem}        # выполняем действия с массивом
end
 
# Вызов метода, вот в этой точке начнется выполнение метода
test(result)
или если два метода друг за другом в первом получаем result во втором обрабатывает (код условный)
Еще раз. Пока вы не вызовете метод ничего не произойдет. Пока вы не передадите параметр в метод он ничего о нем не узнает.

Считайте, что в определении метода код ничего не делает и не содержит до тех пор пока вы его не вызовите
Ruby
1
2
3
4
5
6
7
8
9
# здесь ничего... только определение
def somefunc(arg)
 puts arg
end
 
text = "some text"
 
# и только здесь начинается работа с методом
somefunc(text)
Никакой разницы в каком порядке вы определяете методы нет. Явно вызываем метод и передаем параметр.

или нужно внутри метода test обратиться к test1 ?
Это можно...
0
0 / 0 / 0
Регистрация: 16.02.2014
Сообщений: 12
18.02.2014, 15:43  [ТС]
olegmlsn, могу я с вами как то связаться ? Если сочтете это возможным моя почта {удалено}
 Комментарий модератора 
Обсуждение ведется на форуме.


Добавлено через 36 минут
я даже тупее, чем думал...

Ruby
1
2
3
4
5
6
7
def metod1
  metod2           # вызов метода 2
end
def metod2
 name = "деталь"
 puts (name)      # печать имени
end
как перенести печать в metod1 оставив получение во втором ?

Добавлено через 4 минуты
правка

Добавлено через 21 секунду
правка

Добавлено через 24 секунды
правка

Добавлено через 1 минуту
Так ?
Ruby
1
2
3
4
5
6
7
8
def metod1
  metod2           # вызов метода 2
  puts (name)      # печать имени
 
end
def metod2
 name = "деталь"
end
0
2 / 2 / 4
Регистрация: 17.02.2014
Сообщений: 18
18.02.2014, 15:54
Вот так
Ruby
1
2
3
4
5
6
7
8
def metod1
  name = metod2
  puts (name)
end
 
def metod2
 name = "деталь"
end
Перечитайте последние сообщения еще раз, лучше не торопясь.
0
0 / 0 / 0
Регистрация: 16.02.2014
Сообщений: 12
18.02.2014, 17:22  [ТС]
olegmlsn, Точно последний вопрос я уже понял сам не сделаю...
разобрал весь код ( вычисления не касающиеся печати убрал из примера) -код рабочий.
помогите из write_piece_to_file убрать печать данных (для каждой детали)
и перенести в указанное место для всех деталей

Ruby
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
file.puts("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>")      # переменная файл уже определана (печатает нормально)
file.puts("<data>") 
file.puts("<parts>")
 
for i in 0..selection.count - 1                # сколько деталей выбрано
    entity = selection[i]
    recursive_count(selection[i], file)             
end
######################################################################################
#                 ПЕЧАТЬ ДАННЫХ Для ВСЕХ ДЕТАЛЕЙ  
#          при совпадении всех атрибутов   дубли объединить а кол-во увеличить                                #
#   как вот сюда вставить hash_result с эго обработкоЙ и где нужно собрать result    #
#                                                                                    #
######################################################################################
 
file.puts("</data>")
 
 
def recursive_count(entity, file)              # из -за доп. вычислений метод нельзы исключить
  #здесь  некоторые доп. вычисления
   write_piece_to_file_fo_cut(entity, file)
end 
def write_piece_to_file_fo_cut(entity, file)   # из -за доп. вычислений метод нельзы исключить
  #здесь  некоторые доп. вычисления
   write_piece_to_file(entity, file)
end 
def write_piece_to_file(entity, file)          # вычисляются данные для каждого entity и печатаются в таблицу  
      name_label = entity.get_attribute ("dynamic_attributes","name_label",0).to_s
      length = entity.get_attribute ("dynamic_attributes","length",0).to_s
      width = entity.get_attribute ("dynamic_attributes","width",0).to_s 
      thick = entity.get_attribute ("dynamic_attributes","thick",0).to_s
      area_round = entity.get_attribute ("dynamic_attributes","area_round",0).to_s
      file.puts("<row>")     
              file.puts("<name>" + name_label.to_s + "</name>")                       # сейчас для entity [i] печатает в таблицу имя entity нужно убрать
              file.puts("<quantity>1</quantity>")                                     # сейчас для entity [i] печатает в таблицу кол-во entity  нужно убрать
              file.puts("<length>" + length.to_s  + "</length>")                      # сейчас для entity [i] печатает в таблицу длину entity  нужно убрать
              file.puts("<width>" + width.to_s  + "</width>")                         # сейчас для entity [i] печатает в таблицу ширину entity  нужно убрать
              file.puts("<thick>" + thick.to_s  + "</thick>")                         # сейчас для entity [i] печатает в таблицу толщину entity  нужно убрать
              file.puts("<area>" + area_round.to_s + "</area>")                       # сейчас для entity [i] печатает в таблицу площадь entity  нужно убрать
      file.puts(file.puts("</row>")
end
Добавлено через 10 минут
правка
0
2 / 2 / 4
Регистрация: 17.02.2014
Сообщений: 18
19.02.2014, 10:27
Давайте весь код
0
0 / 0 / 0
Регистрация: 16.02.2014
Сообщений: 12
19.02.2014, 11:10  [ТС]
Цитата Сообщение от olegmlsn Посмотреть сообщение
Давайте весь код
там очень много специфических для Sketchup методов... (коментарии есть)
а могу я его на обменник положить ?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
19.02.2014, 11:10
Помогаю со студенческими работами здесь

При выборке одна и та же строка выводится несколько раз. Как сделать чтобы один?
Считываем журнал безопасности в Базу данных так сказать онлайн и в textbox записываем выборки и он находит запись с eventID=4689 и как...

Entity Component System, можно ли доработать класс Entity
Здравствуйте, сделал свою реализацию Entity Component System, но хотелось бы узнать ваше мнение по поводу класса Entity. Можно ли ускорить...

Entity Framework. Удаление entity без удаления связей
Вечер добрый. Есть модель Coder First. Каскадное удаление запрещено. Удаление произвожу так: try { ...

Entity framework 4.1: как обновить таблицу
На основе модели entity framework создал базу данных и в ней таблицу, после изменения модели, начинает выскакивать ошибка в которой...

Entity framework, как связать класс и таблицу
Помогите разобраться. Допустим, что у нас есть класс public class user { public string name { set; get; } } и в базе данных...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru