|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - [решено] Транспонирование таблицы |
|
C/C++ - [решено] Транспонирование таблицы
|
Пользователь Сообщения: 77 |
Добрый день. Прошу помощи знатоков.
Необходимо транспонировать таблицу из строки в столбик при чем необходимо отбросить часть ненужных данных. пример таблицы со входящими данными
входящие данные в файле DataTable.xlsx На листе Input - входящие данные На листе output - то что надо получить я пытался сделать путем перебора столбцов, но почемуто работает не корректно, да и выглядит это крайне не красиво. Подскажите может есть варианты более изящьные. Скрытый текст
private DataTable GetTerminalDataTable(DataSet TerminalData) { DataSet ds = TerminalData; #region Обработка DataSet // Создаем новую таблицу DataTable TabPivot = new DataTable(); TabPivot.Columns.Add("YCOOR", typeof(int)); TabPivot.Columns.Add("PRINTMODE", typeof(string)); TabPivot.Columns.Add("TEXT", typeof(string)); string Text = ""; string Printmode = ""; int Y = 0; // Начинаем перебирать таблицы for (int tab = 0; tab < ds.Tables.Count; tab++) { if (ds.Tables[tab].Columns.Count > 1) { //AddButton("Нет активных заданий на перемещение", 0, 6); //MessageBox.Show($"Данных больше 1"); //Начинаем перебирать данные в этой таблице for (int column = 0; column < ds.Tables[tab].Columns.Count; column++) { DataRow DRow = ds.Tables[tab].Rows[0]; int count = 0; //счетчик для подсчета и нумерации строк (ROW) if (SqlExtensions.RemoveIntegers(SqlExtensions.GetColumnName(DRow, column)) == "YCOOR") { Y = SqlExtensions.ConvertStringToInt(SqlExtensions.GetColumnValue(DRow, column)); } if (SqlExtensions.RemoveIntegers(SqlExtensions.GetColumnName(DRow, column)) == "PRINTMODE" && SqlExtensions.GetColumnValue(DRow, column) != "CLEAR" && SqlExtensions.GetColumnValue(DRow, column) != "CLSCR" && SqlExtensions.GetColumnValue(DRow, column) != "CENTERED") { Printmode = SqlExtensions.GetColumnValue(DRow, column); } if (SqlExtensions.RemoveIntegers(SqlExtensions.GetColumnName(DRow, column)) == "TEXT") { Text = SqlExtensions.GetColumnValue(DRow, column); } if (!string.IsNullOrEmpty(Text) && !(string.IsNullOrEmpty(Printmode)) && Y >= 0) { var r = TabPivot.NewRow(); r["YCOOR"] = Y; r["PRINTMODE"] = Printmode; r["TEXT"] = Text; TabPivot.Rows.Add(r); //добавляет запись в конец таблицы count++; } } } } #endregion return TabPivot; } |
|
Отправлено: 08:46, 19-02-2019 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать dosperados, я лично не вижу там транспонирования.
Транспонирование выглядит вот так…
![]() Опишите словами принципы перевода содержимого одного Рабочего листа в содержимое другого Рабочего листа. |
Отправлено: 19:48, 19-02-2019 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Пользователь Сообщения: 77
|
Профиль | Отправить PM | Цитировать Iska, Вы правы в чистом виде там нет транспонирования.
Наверно правильнее было бы назвать просто "преобразование таблицы". Суть преобразования состоит в том, что в одной строке приходят все данные. Скрытый текст
XCOOR | YCOOR | PRINTMODE | PRINTMODE | PRINTMODE | TEXT | METHOD | PRINTMODE | XCOOR | YCOOR | PRINTMODE | PRINTMODE | TEXT.......
0 | 0 | CLEAR | CLSCR | INVERSE | ВХОД В СИСТЕМУ | PRINT | CLEAR | 0 | 2 | NORMAL | CENTERED | System....... Отбрасывая лишние данные нужно преобразовать их в вид: Причем есть такие столбец "PRINTMODE" который содержит данные в виде триггера (т.е. пока не придет команда CLEAR в этом столбце, что значит очистить значение и следующая команда INVERSE или NORMAL) Скрытый текст
YCOOR | PRINTMOD | TEXT
0 | INVERSE | ВХОД В СИСТЕМУ 1 | NORMAL | System 4 | NORMAL | УКАЗАНИЕ ОПЕРАТОРУ 6 | NORMAL | СКАНИРУЙТЕ ЛИЧНУЮ 7 | NORMAL | КАРТОЧКУ ДЛЯ 8 | NORMAL | НАЧАЛА РАБОТЫ 10 | INVERSE | DB_Name 13 | INVERSE | АДРЕС:TEST_MSSQL-F38E7C3C 14 | INVERSE | X - ВЫХОД Для меня большую трудность представляет именно этот столбец PRINTMOD, который содержится не всегда, но необходим для выходной таблицы. |
Отправлено: 05:42, 20-02-2019 | #3 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать dosperados, опишите алгоритм преобразований словами.
|
Отправлено: 05:58, 20-02-2019 | #4 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
MSFT SQL Server - [решено] Некоторые поля одной таблицы синкать с полями другой таблицы | uptk | Программирование и базы данных | 5 | 01-09-2014 20:29 | |
Удаление записей таблицы по данным другой таблицы | xNiSSaNx | Вебмастеру | 4 | 02-08-2013 21:58 | |
MSFT SQL Server - создание таблицы точнее проблемма с созданием таблицы | GAROD | Программирование и базы данных | 4 | 02-12-2010 00:58 | |
Win32 API - Таблицы в visual c | chilka | Программирование и базы данных | 2 | 15-05-2008 22:39 | |
Таблицы | swine | Вебмастеру | 11 | 08-05-2004 18:25 |
|