![]() |
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
Компьютерный форум 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 |
|