Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
viktor80
0 / 0 / 0
Регистрация: 02.09.2015
Сообщений: 6
#1

Как создать список номеров которыми можно управлять как базой данных - Delphi

02.09.2015, 22:08. Просмотров 568. Ответов 9
Метки нет (Все метки)

Привет

Полный новичок в программировании, вопрос по Delphi

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

чтобы можно было использовать его так

1 присвоить ID 1
2 присвоить ID 2
3 присвоить ID 3
4 присвоить ID 4

и если убрать один скажем ID2 он принимает какое-то значение например 0, потом идет пересчет и + 1 переменной минус и - 1 следующему чтобы переместить его назад, ну и так далее если есть ноль +1 к минусу и - 2 всем последующим до конца, получить это

1 присвоен ID 1
2 присвоить ID 3
3 присвоить ID 4

или так

1 это ID 1
2 это ID 2
3 это ID 3
4 это ID 4

общее количество 4 значит +1 всем кроме наибольшего 4 который получает результат - 1 от общего количества, то есть - 3 и получить это

1 это ID 2
2 это ID 3
3 это ID 4
4 это ID 1

вопрос в том как создать такой список чисел?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.09.2015, 22:08
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Как создать список номеров которыми можно управлять как базой данных (Delphi):

Создать список уникальных последовательностей номеров
Приветствую. Хотелось бы понять, как реализовать следующее: Нужно создать...

Можно ли создать консольное приложение и управлять им с помощью кнопок на форме?
У меня такой вопрос: Можно создать консольное приложение и управлять им с...

Как создать программу справочник телефонных номеров
Здравствуйте! как создать программу в делфи 6? нужно сделать справочник...

Создать тест с базой данных + шифрование
Ребят первый раз сюда обращаюсь, помогите пожалуйста разобраться в чем ошибка,...

Написать приложение, посредством которого можно управлять базой данных
Доброго времени суток. Имеется бд access. Нужно написать на яве приложение,...

Как создать приложение, работающее с базой данных
вопрос: у меня на сайте есть база mysql. можно ли создать в delphi приложение,...

9
SuvAlexander
2 / 2 / 1
Регистрация: 02.09.2015
Сообщений: 15
Записей в блоге: 5
02.09.2015, 23:17 #2
Словесное описание не понял. По примерам догадываюсь, что первая задача называется "удаление элемента из списка", вторая - "перемещение(удаление/вставка) элемента в списке".
Тебе подходит System.Generics.Collections.TList<Integer>.
Вот пример использования. Только нумерация не от 1, а от 0. Будут вопросы - обращайтесь.
Delphi
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
program Project1;
 
{$APPTYPE CONSOLE}
 
uses
  System.Generics.Collections;
 
procedure PrintList(aList: TList<Integer>);
var
  i: Integer;
begin
  for i := 0 to aList.Count - 1 do
    Writeln('List[', i, ']=', aList[i]);
  Writeln;
end;
 
procedure Test;
var
  aList: TList<Integer>;
begin
  aList := TList<Integer>.Create;
  try
    aList.Add(0);
    aList.Add(1);
    aList.Add(2);
    aList.Add(3);
    PrintList(aList); // 0 1 2 3
 
    // Решение первой задачи
    // aList.Delete(1);
    // PrintList(aList); // 0 2 3
 
    // Решение второй задачи
    aList.Delete(0);
    aList.Insert(3, 0);
    PrintList(aList); // 1 2 3 0
  finally
    aList.Free;
  end;
  Readln;
end;
 
begin
  Test;
end.
0
viktor80
0 / 0 / 0
Регистрация: 02.09.2015
Сообщений: 6
03.09.2015, 03:19  [ТС] #3
Привет

спасибо за ответ

суть вопроса вы поняли правильно, однако попробую понятнее объяснить что показано в словесном описании чтобы сразу не сбиться с верного пути. И в первом и во втором варианте показаны способы сортировки для получения требуемых результатов, которые мне нужно применить к этому списку

допустим есть база данных скажем аудио файлов или просто каких-то названий, которые должны по одному выводиться на дисплей ну или проигрываться в случайном или последовательном порядке, но это не имеет значения, так как вопрос заключается не в том как реализовать само удаление, добавление или перестановку, а в том как получить сам список таких чисел с которыми можно делать эти манипуляции

итак

1. ввод в программу первого аудио файла (беру в пример аудио файл, чтобы не путать, в первом описании это был просто ID)

2. присвоение этому файлу номера 1 (того самого первого числа из требуемого списка, то есть сколько файлов будет добавлено столько чисел и должно быть сгенерировано)

3. допустим уже есть 4 файла

1 это файл#1
2 это файл#2
3 это файл#3
4 это файл#4

удаляю один из них например файл#2 и здесь я словесно описываю как будет происходить сортировка:

1.
Номер 2 должен принять значение 0 указывающее на то что файл#2, присвоенный к этому номеру был удален

2.
пересчет номеров и всех присвоенных к ним файлов от первого до последнего

3.
если файл принадлежащий номеру 2 был удален и его значение 0 то есть "удален", то к переменной "минус" которая изначально равна нулю прибавляется +1 (то есть эта переменная, которая в процессе пересчета собирает количество нулей то есть удаленных файлов)

4. переменная равна 1 и соответственно все последующие файлы переключаются на - 1, а точнее:

файл#1 остается номер 1
файл#3 присваивается номеру 2
файл#4 присваивается номеру 3

во втором примере файлы выполняют роль номеров переключающихся по списку номеров, условно их можно назвать "бегущие номера" или пускай будет покороче "run number"

1 это run#1
2 это run#2
3 это run#3
4 это run#4

переключение происходит следующим образом:

1.
Определяю общее количество номеров, здесь их 4

2.
Прибавляю +1 всем бегущим номерам кроме наибольшего 4

3.
далее вычисляю: - 1 от общего количества чисел, то есть 4 - 1 = 3 и полученный результат 3 отнимаю от наибольшего бегущего номера 4, визуально выглядит так:

1 это run#1 (переключение) +1= run#2 (пркл.) +1= run#3
2 это run#2 (переключение) +1= run#3 (пркл.) +1= run#4
3 это run#3 (переключение) +1= run#4 (пркл.) +3= run#1
4 это run#4 (переключение) -3= run#1 (пркл.) +1= run#2 и т.д

то есть для выполнение подобных простых вычислений нужен какой-нибудь гибкий список, способный получать эти значения, увеличиваться и уменьшаться в процессе работы

Добавлено через 1 час 5 минут
прошу прощения поставил плюс вместо минуса так

1 это run#1 (переключение) +1= run#2 (пркл.) +1= run#3
2 это run#2 (переключение) +1= run#3 (пркл.) +1= run#4
3 это run#3 (переключение) +1= run#4 (пркл.) -3= run#1
4 это run#4 (переключение) -3= run#1 (пркл.) +1= run#2 и т.д

Добавлено через 21 минуту
еще раз хочу подчеркнуть, что эти примеры которые я привел здесь не для того чтобы их решить, а для того чтобы было понятно какая гибкость списка нужда для того чтобы потом самому применять к нему подобные варианты сортировок желательно на этих примерах, так как они в принципе обобщают требования. возможно еще стоит учесть что эти два примера также должны работать совокупно в связке

run#1 это 1 это файл#1
run#2 это 2 это файл#2
run#3 это 3 это файл#3
run#4 это 4 это файл#4

Добавлено через 21 минуту
в данном случае при удалении или добавлении файла произойдет перестановка бегущих номеров в исходным порядке так

1 это файл#1 это run#1 (пркл.) +1= run#2 (пркл.) +1= run#3 (пркл.) файл#1 это 1 это run#1
2 это файл#2 это run#2 (пркл.) +1= run#3 (пркл.) +1= run#4 (пркл.) xxxx#0 удален
3 это файл#3 это run#3 (пркл.) +1= run#4 (пркл.) -3= run#1 (пркл.) файл#3 это 2 это run#2
4 это файл#4 это run#4 (пркл.) -3= run#1 (пркл.) +1= run#2 (пркл.) файл#4 это 3 это run#3
0
KMSNasgool
57 / 47 / 25
Регистрация: 17.12.2013
Сообщений: 204
03.09.2015, 04:49 #4
В Вашем случае лучше использовать не
Цитата Сообщение от viktor80 Посмотреть сообщение
управлять как условной базой данных без базы данных
а реальную базу данных. Например лежащий рядом с программой файл MS ACCESS или SQLite.
1
viktor80
0 / 0 / 0
Регистрация: 02.09.2015
Сообщений: 6
03.09.2015, 05:19  [ТС] #5
а имеет ли смысл если вместо файла мне нужно только число, просто слово или буква

run#1 это 1 это R
run#2 это 2 это F
run#3 это 3 это U
run#4 это 4 это A
0
KMSNasgool
57 / 47 / 25
Регистрация: 17.12.2013
Сообщений: 204
03.09.2015, 05:31 #6
все твои манипуляции с порядковыми номерами...

Смотри:
У тебя есть база данных.
В ней таблица с полями:
ID (автоинкремент) - уникальное число идентифицирующее запись в таблице
FileName - полный путь к аудиофайлу и его имя.
Так же могут присутствовать и другие поля (жанр, артист, альбом, название песни, битрейт, формат в котором закодирован и т.д.)

К этой базе данных делаешь запрос по любому атрибуту, например все треки определенного артиста.
Результатом будет таблица, содержащая только необходимые записи. Сортировать их можно как угодно.
Если ты из этой базы собираешь плейлист, то в него добавляешь только число ID. Сам список можешь сортировать как угодно. При воспроизведении из базы по ID получаешь путь к файлу и воспроизводишь.
При удалении нет никакой заморочки с номерами.

Нумеруй уже сформированный список воспроизведения по порядку, после сортировки.
1
krapotkin
3298 / 2938 / 1015
Регистрация: 14.04.2014
Сообщений: 14,266
Записей в блоге: 13
03.09.2015, 05:56 #7
БД +1

но если говорить чисто о программной части, то все перемудрил...
Есть общий список, итого. Если нужно составить из этого списка плейлист, сделай второй, третий, пятый и т.д.
Если нужно хранить "удаленные", заведи список удаленных
Тогда не надо изобретать велосипеды. Переменная "минус" - это просто кол-во элементов в списке lstDeleted.
Элементы любого списка можно сортировать как угодно.
При этом исходный список можно оставить в покое...
1
viktor80
0 / 0 / 0
Регистрация: 02.09.2015
Сообщений: 6
03.09.2015, 18:30  [ТС] #8
дело в том что это не просто сортировка для упорядочивания файлов, мне нужно чтобы база работала именно в том порядке, который я описываю после каждого переключения, в целом около 2000 файлов и они должны переключаться вместе, удаление одного смещает все последующие назад на один, при добавлении прибовляется к последнему наибольшему, так как определенный файл должен принадлежать к определенному слою, иначе я получаю просто сартировку и плейлист, а это не то что мне нужно. То же самое с бегущими числами, они должны переключатся поверх всей базы. Подскажите какую именно базу лучше использовать для этой цели?

Добавлено через 2 часа 18 минут
Все верно, если бы речь шла о том как реализовать эти манипуляции, но дело в том что мне не нужна решенная задача или уже готовый способ как переключить или удалить, поэтому я и привел в пример эти велосипеды, так как список нужен именно для того чтобы самому писать к нему подобные манипуляции. Но по всей видимости в принципе это одно и то же, поэтому базу данных в итоге придется применить, надо только определить какая именно лучше в этом случае. Изначально вопрос стоял как получить список способный выполнять подобные задачи без базы данных
0
krapotkin
3298 / 2938 / 1015
Регистрация: 14.04.2014
Сообщений: 14,266
Записей в блоге: 13
03.09.2015, 21:27 #9
все в куче, кони, люди...
база - это просто хранилище. шкаф. в каком порядке и какие вещи оттуда доставать, придумывает программист, путем составления запроса. никакая база не лучше. в данном случае нужно что-то крайне маленькое. например, Firebird embedded. Но и файловая система тут вполне подходит в роли БД. Можно не городить огородов.

Дальше.
Мы же понимаем, что файл не может принадлежать ни к какому слою. он файл. следовательно, все слои существуют только в голове программиста и должны быть реализованы в модели данных внутри программы.

Еще дальше. Список - это список указателей на объекты. Несколько списков могут ссылаться на одни и те же объекты. Так можно реализовать слои и все что угодно.
Если из списка что достать (extract или delete), он весь и так "сдвинется". Нумерация возникнет только при выводе на экран - это номер элемента списка +1
Какая еще гибкость нужна? Гибче списков ничего нет...

Бегущие числа тоже непонятно что. Скорее всего, вы решаете какую-то известную проблему странным алгоритмом и решать ее не нужно, нужно переделать алгоритм. Попытайтесь внятно объяснить, что нужно получить а не то, как вы вычисляете числа...
1
viktor80
0 / 0 / 0
Регистрация: 02.09.2015
Сообщений: 6
04.09.2015, 00:52  [ТС] #10
Для работы нужен специфический инструмент, поэтому интересно попробовать сделать самому. Что касается слоев так и есть от 1ого до 10 файлы в базе относятся к первому слою от 10ого до 20ого ко второму (независимо от смещения) и т д. так и есть, все в модели данных внутри программы. Бегущие числа нужны для того чтобы индивидуальное значение бегущего числа совпадало с отдельным файлом, прикрепленным к номеру бызы, как параллельный список переключающийся по списку номеров, к которому будет обращаться программа. Выбираю один конкретный бегущей номер с его уникальным значением и вывожу на дисплей соответствующий ему уникальный файл, вижу комбинацию. понятно что я не программист, но в этой задаче теоретически мне не представляется ничего кроме параллельных чисел переключающихся по номерам тем или иным образом, можно и по-другому к примеру каждое отдельное может присваивать номер индивидуально в зависимости от предыдущего, но здесь особой разницы не вижу, одно и то же при условии если есть база

Добавлено через 4 минуты
Всем спасибо за помощь, думаю вопрос исчерпан. Нужно было разобраться какое направление брать
0
04.09.2015, 00:52
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.09.2015, 00:52
Привет! Вот еще темы с решениями:

Можно ли установить соединение с файлом XML как с базой данных?
У меня есть программа, которая коннектится к БД Oracle и работает с данными....

Как в программе можно открыть файл, с уже готовой базой данных в Access
Скажите как в программе можно открыть файл, с уже готовой базой данных в Access

Есть Java SE программа, ей можно управлять удаленно, подскажите как это можно выключить
Есть Java SE программа, ей можно управлять удаленно, подскажите как это можно...

Как программно открыть файл с разбивкой на страницы? Как можно управлять опцией 'Maintain layers and pages' ?
Привет всем! Ситуация: в проекте подключаю объект CorelDRAW. Открываю файл с...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru