Этап кода голубой призмы для извлечения данных коллекции

У меня есть коллекция, которая заполняется во время выполнения и, следовательно, не имеет объявленных полей. Мне нужно извлечь значения последнего столбца, а количество столбцов является динамическим, и я не могу этого сделать. Как я могу сделать это с использованием этапа кода или без него? (Код: только VB, так как у меня есть другие блоки кода, работающие на VB)

Я попытался заменить значение другой переменной на этапе расчета, например: [моя_коллекция.[имя_столбца]]. Он выдает ошибку, когда я нажимаю «Проверить выражение».

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
2 613
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ну, это действительно открытый вопрос.

Во-первых, синтаксис типа "[моя_коллекция.[имя_столбца]]" не будет работать - если вы хотите сделать что-то подобное, вам может понадобиться действие "Получить значение из коллекции по строке и столбцу".

Dim Proper_Row As System.Data.DataRow
Dim i As Integer = Coll_in.Columns.IndexOf(Field_name)
Dim Rows_count as Integer = Coll_in.Rows.Count

if i = -1 Then Throw new Exception ("Field does not exist")
if Rows_count < Row_number Then Throw new Exception ("Row Number higher than actual row count")

Proper_Row = Coll_in.rows(Row_number - 1)
Result = Proper_Row(Field_name) 

Proper_Row = nothing
i = nothing
Rows_Count = nothing

Другой подход состоял бы в том, чтобы переименовать последний столбец во что-то известное. У вас может быть действие, которое вернет имя столбца n=th, и действие, которое переименует столбец. В качестве небольшого совета - вы можете найти количество столбцов, используя действие "подсчет столбцов" из стандартного объекта "Коллекции".

//Finding n-th column name
outname = in_coll.columns(column_index).name

//renaming column
Collection_Out = Collection_In.Copy

For Each c As DataColumn in Collection_Out.Columns
    If c.ColumnName = Field_Name Then
        c.ColumnName = New_Name
        Exit For
    End If
Next

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

И, наконец, может быть, вы могли бы использовать действие, которое просто возвращает список значений из коллекции?

//Join field values to string
For Each dr As DataRow In DT.Rows

    If dr(FieldName) <> "" Then
        JoinedString = JoinedString & Separator + dr(FieldName)
    End If
Next

If JoinedString <> "" Then
    JoinedString = JoinedString.Substring(Separator.Length, JoinedString.Length - Separator.Length)
End If

OutString = JoinedString 
Ответ принят как подходящий

Откровенно говоря, использование пользовательских стадий кода для чего-то такого простого несколько излишне, особенно если учесть, что компромисс с удобством сопровождения почти всегда не будет стоить того в долгосрочной перспективе.

Используя Utility - Collection Manipulation VBO, вы можете объединить следующие действия для достижения желаемой функциональности:

  1. Действие: получить имена столбцов

    • Объект: Utility - Collection Manipulation
    • Ввод: My_Collection
    • Результат: Column Names - My_Collection (Коллекция)
  2. Начало цикла

    • Коллекция: Column Names - My_Collection
  3. Действие: количество столбцов

    • Объект: Внутренний -> Collections
    • Ввод: "My_Collection"
    • Результат: Count of Columns - My_Collection (Число)
  4. Решение: Это последняя колонка?

    • Выражение: [Count of Columns - My_Collection] <= 1
    • Yes путь: #7
    • No путь: #5
  5. Действие: Удалить столбец

    • Объект: Utility - Collection Manipulation
    • Вход (коллекция входных данных): [My_Collection]
    • Вход (имя столбца): [Column Names - My_Collection.Field Name]
    • Выход (выходная коллекция): [My_Collection]
  6. Конец цикла

  7. Действие: Переименовать поле

    • Объект: Utility - Collection Manipulation
    • Вход (коллекция на входе): My_Collection
    • Ввод (имя поля): [Column Names - My_Collection.Field Name]
    • Введите (новое имя): "Result" (или имя по вашему выбору)
    • Выход (выходная коллекция): [My_Collection]
  8. Начало цикла

    • Коллекция: My_Collection
  9. Логика обработки

    • Используйте выражение [My_Collection.Result] для ссылки на значение в текущей строке
  10. Конец цикла

Спасибо. Это работало как шарм, но с некоторыми изменениями, которые лучше всего подходят для моей проблемы. Мне просто нужно было получить значение последнего столбца. Я выполнил следующие действия: получить поля коллекции (шаг 1) -> перевернул его -> переименовал (шаг 7). И моя коллекция теперь переименована и запрос решен.

sahnmetpierr 11.04.2019 07:13

Другие вопросы по теме