Напишите методы сортировки таблицы LabVIEW
Элемент управления Таблица, расположенный в палитре Controls =» List&Table предназначен для создания таблиц на лицевой панели. Каждая ячейка находится в строке и столбце таблицы. Поэтому таблица представляет собой двумерный массив строк.
Сортировка таблицы. Cортировка осуществляется с помощью функции Sort ID Array, которая находится в палитре Functions =>Array. Эта функция сортирует элементы одномерного массива в порядке возрастания. Если массив состоит из кластеров, функция сортирует массив по первым элементам кластеров. В связи с этим таблицу следует преобразовать в массив таким образом, чтобы интересующий пользователя столбец стал первым. И потом
сформировать из полученного массива кластер, который мы и будем сортировать. После осуществления сортировки кластер следует преобразовать массив и вернуть столбцы на свои первоначальные места. Следует создать таблицу и целочисленный элемент управления, который будет указывать столбец для сортировки. Заполните таблицу какими-либо данными. По умолчанию заголовки столбцов и строк не видны. Чтобы заголовки столбцов стали видны в свойствах таблицы (диалоговое окно свойств вызывается из контекстного меню пунктом Properties) поставьте флажок напротив ShowColumnHeaders. Кроме этого, чтобы появилась возможность редактировать заголовки, можно включить в контекстном меню таблицы опцию EditableHeaders. Сдвиг столбца осуществляется с помощью Rotate ID Array из той же палитры Functions =>Array. Одномерный массив, который подается на вход функции Rotate ID Array, представляет собой строки нашей таблицы. Каждую строку получите с помощью цикла For. Если для каждой строки в отдельности поменять элементы местами, то в целом в таблице местами поменяются столбцы. Допустим, как и на рис. 14.10, необходимо сортировать таблицу по третьему столбцу (отсчет начинается с нуля). Иначе говоря, столбец с отчествами надо поместить на первое место. Функция Rotate ID Array перемещает n элементов из начала в конец, если n > 0. И наоборот перемещает n элементов из конца в начало, если n < 0. Если на вход n подан 0, функция строку не изменяет. Столбцы таблицы надо сдвинуть на 2 столбца влево до сортировки, и на 2 столбца вправо после. Поэтому до использования функции сортировки необходимо подать -2 на вход n функции Rotate ID Array, а после +2. Преобразование массива в кластер и кластер в массив осуществляют функции ArrayToCluster и ClusterToArray соответственно. При преобразовании кластера в массив никаких дополнительных операций проводить не требуется. А при преобразовании массива в кластер следует указать размер кластера. Предполагается, что структура таблицы известна заранее. Делается это через пункт clustersize контекстного меню функции. В нашем случае размер кластера равен 4. Итак, вы разбили таблицу на отдельные строки. В каждой строке в цикле For поменяли местами столбцы. Сформировали из элементов строки кластер. На
выходе из цикла For собрали из кластеров массив. Отсортировали массив кластеров по первому элементу в кластере. Опять использовали цикл For, в котором из каждого элемента массива кластеров получили одномерный массив. Поменяли местами столбцы обратно. На выходе цикла For собрали отсортированные строки в таблицу. Остается вывести этот результат в ту же таблицу. Вариант с новой таблицей на лицевой панели в виде элемента индикации, безусловно, возможен. Однако такой способ отображения информации при работе с таблицами по вполне понятным причинам не является общепринятым. Необходимо, чтобы отсортированная таблица отображалась в исходной таблице. В таких случаях удобно использовать локальные переменные. Локальную переменную для любого элемента управления или индикации можно создать из контекстного меню элемента, выбрав пункт Create =>LocalVariable. Этот пункт контекстного меню доступен как на лицевой панели, так и на блок-диаграмме. После того, как вы создали локальную переменную, ее терминал появится рядом с терминалом элемента управления или индикации на блок-диаграмме (рис. 14.11). Локальную переменную можно использовать в любом месте блок-диаграммы (если это не противоречит логике выполнения программы). Ее можно использовать как для чтения данных, так и для записи. В качестве последнего необходимо использовать локальную переменную, соединив ее с полученной отсортированной таблицей. ВП готов. Окончательная блок-диаграмма показана на рис. 14.12.