4 / 4 / 3
Регистрация: 05.08.2014
Сообщений: 54
|
||||||
1 | ||||||
Подсчет количества повторов в StringList'e и заполнение столбца StringGrid05.08.2014, 13:09. Показов 3922. Ответов 18
Метки нет (Все метки)
Добрый день коллеги! Возникла непреодолимая (собственными силами) проблема, суть ее в том, что из таблицы Excel формируются два StringList'a уникальных значений, первый содержит список с дубликатами (sl2), второй уже без (sl). Циклом я беру значения из sl и считаю количество совпадений в sl2. Далее заношу эти данные в StringGrid. Однако последнее значение остается незаполненным (видимо цикл по последней записи в sl не срабатывает). Что я не делал и как не менял код - результат или ошибочный или без последнего результата. Алгоритм выполнения такой: третий столбец StringGrid содержит количество дубликатов каждой записи из второго столбца, далее строки сортируются по третьему столбцу, а уже в первом будет порядковый номер обозначающий номер в рейтинге. С сортировкой еще пока даже не заморачивался, но если будут мысли и по этому поводу, буду признателен! Помогите кто чем может люди добрые... =)))
Листинг:
0
|
05.08.2014, 13:09 | |
Ответы с готовыми решениями:
18
Подсчёт количества повторов элементов одномерного массива Заполнение двумерного массива цифрами с ограничением количества повторов цифр Вводится строка, вывести символы строки в порядке убывания количества повторов и указанием числа их повторов Подсчёт количества пикселей в ячейке stringgrid |
13104 / 5885 / 1706
Регистрация: 19.09.2009
Сообщений: 8,808
|
||||||||||||||||||||||||||
05.08.2014, 15:44 | 2 | |||||||||||||||||||||||||
Последняя строка в StringGrid пустая из-за этого:
Сортировку можно ускорить, если в процедуре SgSort() список SlSort сделать изначально сортируемым:
1
|
4 / 4 / 3
Регистрация: 05.08.2014
Сообщений: 54
|
|
05.08.2014, 16:41 [ТС] | 3 |
Mawrat, Спасибо, что откликнулся! К сожалению я уже пробовал изменить цикл, но результат отрицательный. Видимо проблема не в этом! Может быть я что-то пропустил? Есть еще какие мысли?
0
|
13104 / 5885 / 1706
Регистрация: 19.09.2009
Сообщений: 8,808
|
||||||
05.08.2014, 17:07 | 4 | |||||
Ошибка в каких случаях возникает?
Ещё по коду из заглавного поста темы. Там подсчёт повторений надо подправить:
Outwork, я на час, примерно, отлучусь. Напиши пока в каких ситуациях возникает ошибка и какой код сейчас используется.
1
|
пофигист широкого профиля
4732 / 3167 / 858
Регистрация: 15.07.2013
Сообщений: 18,251
|
||||||
05.08.2014, 18:17 | 5 | |||||
Какой цикл менял?
Вот тут явная ошибка
0
|
13104 / 5885 / 1706
Регистрация: 19.09.2009
Сообщений: 8,808
|
|
05.08.2014, 18:35 | 6 |
northener, судя по скриншотам, в StringGrid1 имеется 1 фиксированная строка. Т. е., в таблице количество строк на 1 больше, чем количество элементов в списке Sl. В этом смысле с индексами нет ошибок.
0
|
пофигист широкого профиля
4732 / 3167 / 858
Регистрация: 15.07.2013
Сообщений: 18,251
|
|
05.08.2014, 19:22 | 7 |
0
|
13104 / 5885 / 1706
Регистрация: 19.09.2009
Сообщений: 8,808
|
||||||
06.08.2014, 11:53 | 8 | |||||
В продолжение обсуждения о сортировке таблицы.
Возможно понадобится сортировать по числовым и нечисловым значениям. Под числовыми и нечисловыми будем подразумевать строковые значения. "Числовое" - строковое представление числа, "нечисловое" - строка, которая не является представлением числа. Реализация на основе TStringList.CustomSort(): 1. SgSort(StringGrid1, Col, CompStrAsc); - Сортировка строк по возрастанию. 2. SgSort(StringGrid1, Col, CompStrDesc); - Сортировка строк по убыванию. 3. SgSort(StringGrid1, Col, CompNumAsc); - Сортировка чисел по возрастанию. Строки записываются в конц списка без сортировки. 4. SgSort(StringGrid1, Col, CompNumDesc); - Сортировка чисел по убыванию. Строки записываются в конц списка без сортировки. 5. SgSort(StringGrid1, Col, CompNumStrAsc); - Сортировка чисел и строк по возрастанию. Сначала - числа, потом - строки. 6. SgSort(StringGrid1, Col, CompNumStrDesc); - Сортировка чисел и строк по убыванию. Сначала - числа, потом - строки. 7. SgSort(StringGrid1, Col, CompStrNumAsc); - Сортировка строк и чисел по возрастанию. Сначала - строки, потом - числа. 8. SgSort(StringGrid1, Col, CompStrNumDesc); - Сортировка строк и чисел по убыванию. Сначала - строки, потом - числа.
2
|
4 / 4 / 3
Регистрация: 05.08.2014
Сообщений: 54
|
|
06.08.2014, 14:00 [ТС] | 9 |
Mawrat,
Ошибка возникает после формирования списков, после подсчета всех значений кроме последнего, на нем и вываливается еррор.
Спасибо! Как только со списком решу проблему, сразу начну тестить сортировку.
0
|
13104 / 5885 / 1706
Регистрация: 19.09.2009
Сообщений: 8,808
|
|
06.08.2014, 19:29 | 10 |
Сообщение было отмечено Outwork как решение
Решение
Выше в теме написано, как этот код надо подправить: пост №4:
Надо именно так написать. Если использовать прежний код - из заглавного поста темы, то будет возникать та самая ошибка - List index out of bounds. Потому, что там переменная "e" неверно инициализируется (не в том месте).
1
|
4 / 4 / 3
Регистрация: 05.08.2014
Сообщений: 54
|
|
07.08.2014, 02:26 [ТС] | 11 |
Mawrat, Огромное человеческое спасибо! Три дня угробил на попытки найти в сети ответ, а тут сутки грубо говоря и все работает как надо! Теперь с проблемами буду лучше сюда обращаться!
0
|
northener
|
07.08.2014, 02:38
#12
|
0
|
13104 / 5885 / 1706
Регистрация: 19.09.2009
Сообщений: 8,808
|
|
07.08.2014, 11:47 | 13 |
Пожалуйста.
northener, ты ведь тоже мимо не прошёл, тоже в обсуждении участвовал.
1
|
northener
|
08.08.2014, 03:14
#14
|
Не по теме: Ну да. А куды бедному крестьянину ещё податься? Даже в "Прочее" от ДМ скорее наблюдается почти летаргический сон. На Винград случайно зашёл, ответил на банальный донельзя вопрос и оказался почти единственным отвечающим на почти единственный за неделю вопрос. А если б я был нынче не в отпуске? :)
0
|
4 / 4 / 3
Регистрация: 05.08.2014
Сообщений: 54
|
||||||
13.08.2014, 14:41 [ТС] | 15 | |||||
Mawrat, Уважаемый товарищ! Прошу помощи снова и все по теме циклов! Второй раз не могу воткнуть, как поправить код, чтобы заработало! В общем не загружает последний элемент списка стринглист в комбобокс. Буду безмерно благодарен если не пройдете мимо.
0
|
13104 / 5885 / 1706
Регистрация: 19.09.2009
Сообщений: 8,808
|
|||||||||||
13.08.2014, 15:52 | 16 | ||||||||||
Судя по заголовкам циклов, пропущен индекс = 0:
1
|
4 / 4 / 3
Регистрация: 05.08.2014
Сообщений: 54
|
|
13.08.2014, 17:59 [ТС] | 17 |
Mawrat, если поставить индекс=0, то к тому, что не загрузится последний элемент списка, еще и вначале появится один лишний (пустой). Я уже голову сломал! Не знаю, что и где уже поменять. Методом "тыка" результат достигнуть не удается...
0
|
13104 / 5885 / 1706
Регистрация: 19.09.2009
Сообщений: 8,808
|
|||||||||||||||||||||
14.08.2014, 08:46 | 18 | ||||||||||||||||||||
Сообщение было отмечено Outwork как решение
Решение
Понятно. Чтобы не терялась последняя строка, надо подправить заголовок цикла. Сейчас он записан так:
1
|
4 / 4 / 3
Регистрация: 05.08.2014
Сообщений: 54
|
|
14.08.2014, 09:59 [ТС] | 19 |
Mawrat, опять же огромное спасибо, что откликнулся! Однако все оказалось намного прозаичнее... Список изначально загружался весь, а весь сыр-бор из-за разного алгоритма сортировки: в Эксель почему-то последняя строка начинается на "Ё" , а в комбобоксе последняя (что в общем-то правильно) начинается на "Я". Соответственно я не мог ее видеть. Все же премного благодарен за оперативный ответ и элементарную проверку на пустые строки (все гениальное во истину просто), до которой почему-то сам не догадался (аж стыдно)!
0
|
14.08.2014, 09:59 | |
14.08.2014, 09:59 | |
Помогаю со студенческими работами здесь
19
Заполнение столбца в StringGrid Заполнение StringGrid столбца Подсчёт суммы элементов столбца StringGrid Подсчет количества изменений в ячейках столбца Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |