С Новым годом! Форум программистов, компьютерный форум, киберфорум
Lisp
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
3 / 3 / 0
Регистрация: 12.11.2016
Сообщений: 29
1

Отсортировать записи в БД по одному столбцу в алфавитном порядке

07.11.2018, 14:20. Показов 1029. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Нужно дописать сортировку по столбцу , буду очень признателен

Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
(defun make-ts (production type naming)
 
(list :production production :type type :naming naming))
 
 
(defvar *db* nil)
 
;добавление
 
(defun add-record (ts) (push ts *db*))
 
;вывод
 
(defun dump-db ()
 
(dolist (ts *db*)
 
(format t "~{~a:~10t~a~%~}~%" ts)))
 
;выбирает некоторое значение с БД
 
(defun select (selector-fn)
 
(remove-if-not selector-fn *db*))
 
;выбирает тип
 
(defun type-selector (type)
 
(lambda (ts) (equal (getf ts :type) type)))
 
;генерирует выражение выбора, которое возвращает все записи про тел. систему
 
;которые совпадают со значением, заданым в в where
 
(defun where (&key production type naming)
 
(lambda (ts)
 
(and
 
(if production (equal (getf ts :production) production) t)
 
(if type (equal (getf ts :type) type) t)
 
(if naming (equal (getf ts :naming) naming) t))))
 
;обновление та использования аргументов-ключей для нового значения
 
(defun update (selector-fn &key production type naming (ripped nil ripped-p))
 
(setf *db*
 
(mapcar
 
(lambda (row)
 
(when (funcall selector-fn row)
 
(if production (setf (getf row :production) production))
 
(if type (setf (getf row :type) type))
 
(if naming (setf (getf row :naming) naming)))
 
row) *db*)))
 
;удаление
 
(defun delete-rows (selector-fn)
 
(setf *db* (remove-if selector-fn *db*)))
 
;поиск
 
(defun make-comparison-expr (field value)
 
(list 'equal (list 'getf 'ts field) value))
1
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.11.2018, 14:20
Ответы с готовыми решениями:

Массивы: отсортировать в алфавитном порядке по всему массиву и в алфавитном порядке по строкам
Ввести с клавиатуры массив произвольного размера состоящий из латинских букв отсортировать:а)в...

В алфавитном порядке порядке напечатать (по одному разу) все строчные русские буквы, входящие в заданный текст
С ( Си ) Вводится текст, за которым следует точка. В алфавитном порядке порядке напечатать ( по...

Отсортируйте названия столиц в алфавитном порядке и выведите их по одному в строке
В первой строке задаётся количество названий столиц - число N. В следующих N строках задаются...

Напечатать в алфавитном порядке буквы,входящие в заданный текст по одному разу
Напечатать в алфавитном порядке буквы,входящие в заданный текст по одному разу.

7
Модератор
Эксперт функциональных языков программированияЭксперт Python
37413 / 20785 / 4278
Регистрация: 12.02.2012
Сообщений: 34,196
Записей в блоге: 14
07.11.2018, 15:46 2
Нужно описать полную постановку задачи. А не взять чужой исходник, и, не понимая в нем ничего, переложить на Форум и попросить дописать. В этих огрызках копаться точно никто не будет.
0
3 / 3 / 0
Регистрация: 12.11.2016
Сообщений: 29
07.11.2018, 18:38  [ТС] 3
Нужно отсортировать записи в БД по одному столбцу в алфавитном порядке
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
;Глобальная переменная
(defvar *db* nil)
 
; Добавления записи в базу данных
(defun add-record (ts)
   (push ts *db*)
       (vector-push (getByNumF ts 2) aq)
       (cons lis (getByNumF ts 2) )
)
 
; Выводит содержимое базы данных в более читабельный форме
(defun dump-db ()
(dolist (ts *db*)
(format t "~{~a:~10t~a~%~}~%" ts)))
 
; Выбирает некоторое значение из базы данных
(defun select (selector-fn)
(remove-if-not selector-fn *db*))
 
; Выбирает тип выставки
(defun type-selector (type)
(lambda (ts) (equal (getf ts :type) type)))
 
 
 
; Генерирует выражение выбора, которое возвращает все записи о выставках, которые совпадают со значениями, заданными в where
(defun where (&key title type style)
(lambda (ts)
(and
(if title (equal (getf ts :title) title) t)
(if type (equal (getf ts :type) type) t)
(if style (equal (getf ts :style) style) t))))
 
; Обновления и использования аргументов-ключей для предоставления нового значения
(defun update (selector-fn &key title type style (ripped nil ripped-p))
(setf *db*
(mapcar
(lambda (row)
(when (funcall selector-fn row)
(if title (setf (getf row :title) title))
(if type (setf (getf row :type) type))
(if style (setf (getf row :style) style)))
row) *db*)))
 
;Удаление строк из базы данных
(defun delete-rows (selector-fn)
(setf *db* (remove-if selector-fn *db*)))
 
; Поиск по заданным значениям
(defun make-comparison-expr (field value)
(list 'equal (list 'getf 'ts field) value))
 
 
                    
 
; добавление значений в базу
;  (print "Add info")
 (add-record (make-ts "Flowers" "Сreative" "Modern"))
 (add-record (make-ts "Pictures" "Сreative" "PostModern"))
  (add-record (make-ts "Pict==ures" "Сrea" "PostModern"))
 (add-record (make-ts "Electronics" "Scientific" "Nowadays"))
  (dump-db)
1
Модератор
Эксперт функциональных языков программированияЭксперт Python
37413 / 20785 / 4278
Регистрация: 12.02.2012
Сообщений: 34,196
Записей в блоге: 14
07.11.2018, 20:01 4
БД представляет собой трехстолбцовую таблицу строк?
0
3 / 3 / 0
Регистрация: 12.11.2016
Сообщений: 29
08.11.2018, 11:59  [ТС] 5
Да БД это трехмерная таблица строк.
У меня есть функция которая выводит запись в таблице в зависимости от значения поля. Единственное что мне удалось придумать , это в момент добавления записей в таблицу поля-столбцы записывать в вектор потом его отсортировать и выводить записи по значению отсортированного вектора.

Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
(setq vec (make-array 10 :fill-pointer 0))
; берем первое поле
(defun getByNumF (lst n)  
   (do ((i 1 (+ i 1)))
       ((= i n) (car lst))
       (setq lst (cdr lst))))
 
; Добавления записи в базу данных
(defun add-record (ts)
   (push ts *db*)
       (vector-push (getByNumF ts 2) vec) ; и в момент добавления в базу записи пушить поле
       (cons lis (getByNumF ts 2) )
)
На выходе у меня получился вектор vec
Но я не знаю как его отсортировать. Если это как-то можно сделать буду благодарен.

Добавлено через 2 часа 42 минуты
Не трехмерная , а трехстолбцовая таблица ...извините
1
Модератор
Эксперт функциональных языков программированияЭксперт Python
37413 / 20785 / 4278
Регистрация: 12.02.2012
Сообщений: 34,196
Записей в блоге: 14
08.11.2018, 14:09 6
Лучший ответ Сообщение было отмечено 7макс7 как решение

Решение

Как отсортировать вектор? Например, так:

Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
(defun v-sort (v n)
   (let ((vi 0) (vj 0))  
     (dotimes (i n v)
       (dotimes (j n t) 
         (when (> j i)
           (setf vi (aref v i))
           (setf vj (aref v j))
           (when (> vi vj) (setf (aref v i) vj) (setf (aref v j) vi)))))))
V-SORT
 
CL-USER 36 > (setq *v* (vector 1 2 3 1 2 3 1))
#(1 2 3 1 2 3 1)
 
CL-USER 39 > (v-sort *v* 7)
#(1 1 1 2 2 3 3)
Добавлено через 4 минуты
Сортировка строк:

Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
(defun vs-sort (v n)
   (let ((vi 0) (vj 0))  
     (dotimes (i n v)
       (dotimes (j n t) 
         (when (> j i)
           (setf vi (aref v i))
           (setf vj (aref v j))
           (when (string> vi vj) (setf (aref v i) vj) (setf (aref v j) vi)))))))
VS-SORT
 
CL-USER 41 > (setq *vs* (vector "qw" "yu" "a" "aa" "bvf" "z" "1"))
#("qw" "yu" "a" "aa" "bvf" "z" "1")
 
CL-USER 44 > (vs-sort *vs* 7)
#("1" "a" "aa" "bvf" "qw" "yu" "z")
2
3 / 3 / 0
Регистрация: 12.11.2016
Сообщений: 29
08.11.2018, 15:40  [ТС] 7
Спасибо. Правда я не уверен что этот метод подходит для моего задания , но он имеет право на жизнь , как ни как единственное что придумал.

Добавлено через 34 секунды
Я имел ввиду брать вектор и так сортировать.

Добавлено через 34 минуты
Спасибо Вам. Вроде сделал.
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
37413 / 20785 / 4278
Регистрация: 12.02.2012
Сообщений: 34,196
Записей в блоге: 14
08.11.2018, 15:48 8
7макс7, работать это будет. Но! Когда таблица сортируется по одной из колонок, нужно синхронно переставлять элементы во всех колонках. Это важно.
0
08.11.2018, 15:48
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.11.2018, 15:48
Помогаю со студенческими работами здесь

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

Отсортировать строки в алфавитном порядке
Помогите сделать задачу.. Отсортировать строки в алфавитном порядке по убыванию. Для критерия...

Отсортировать массив в алфавитном порядке
введённый с клавиатуры двумерный массив, произвольного размера состоящий из латинских букв...

Отсортировать строки в алфавитном порядке
Помогите с задачей.. Отсортировать строки в алфавитном порядке по убыванию. Для критерия...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru