Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.10.2015, 17:58   #1
fosiyepa
Пользователь
 
Регистрация: 11.09.2015
Сообщений: 13
По умолчанию

Доброго дня форумчане!
Необходимо хранить и изменять данные из ListView в файле как это лучше сделать? (Чтобы после перезапуска программы все загрузилось опять в ListView)

например если в файле данные хранить вот так:

Цитата:
Caption | SubItems1 | SubItems2 | SubItems3 | SubItems3
Caption2 | SubItems1 | SubItems2 | SubItems3 | SubItems3
Caption3 | SubItems1 | SubItems2 | SubItems3 | SubItems3
Caption4 | SubItems1 | SubItems2 | SubItems3 | SubItems3
то как при изменении столбика в ListView изменять его и в файле?

Последний раз редактировалось Stilet; 13.10.2015 в 18:13.
fosiyepa вне форума Ответить с цитированием
Старый 13.10.2015, 18:13   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
как это лучше сделать?
Записывать это в XML или DBF.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 13.10.2015, 18:47   #3
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Или просто в StringList. Проще не бывает
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 13.10.2015, 19:55   #4
fosiyepa
Пользователь
 
Регистрация: 11.09.2015
Сообщений: 13
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Или просто в StringList. Проще не бывает
это постоянно нужно будет файл перезаписывать?
fosiyepa вне форума Ответить с цитированием
Старый 13.10.2015, 20:05   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

В зависимости от ценности информации. Если ценна и актуальна - то СУБД. Иначе и StringList или XML подойдет с чтением при старте программы и записью при выходе из неё. Хочешь каждый раз перезаписывай, если там не тыщи строк. Визуально разницы не заметишь, если небольшое количество строк
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 13.10.2015, 20:18   #6
fosiyepa
Пользователь
 
Регистрация: 11.09.2015
Сообщений: 13
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
В зависимости от ценности информации. Если ценна и актуальна - то СУБД. Иначе и StringList или XML подойдет с чтением при старте программы и записью при выходе из неё. Хочешь каждый раз перезаписывай, если там не тыщи строк. Визуально разницы не заметишь, если небольшое количество строк
А файл можно постоянно не перезаписывать, например мне нужно изменить строку
Цитата:
Caption3 | SubItems1 | SubItems2 | SubItems3 | SubItems3
можно ее найти и изменить именно ее а не весь файл?
fosiyepa вне форума Ответить с цитированием
Старый 13.10.2015, 20:20   #7
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Можно, если не поменялась длина перезаписываемого участка. Но так сильно сложней с файлом работать. А если уж длина стала больше, то ни как
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 14.10.2015, 13:15   #8
fosiyepa
Пользователь
 
Регистрация: 11.09.2015
Сообщений: 13
По умолчанию

решил использовать tstringlist, возникла проблема с удалением:

Код:
Item := ListView1.Selected;
while Item <> nil do begin
ListView1.Items.Delete(Item.Index);
StringList.Delete(Item.Index);
Item := ListView1.GetNextItem(Item, sdAll, [isSelected]);
end;
SeriesList.SaveToFile('log');
получаю ошибку:

Цитата:
list index out of bounds -1
Не знаю почему но проблема решилась так:

Код:
Item := ListView1.Selected;
while Item <> nil do begin
a:=Item.Index; //Решение
ListView1.Items.Delete(a);
StringList.Delete(a);
Item := ListView1.GetNextItem(Item, sdAll, [isSelected]);
end;
SeriesList.SaveToFile('log');
Код:
Item := ListView1.Selected;
while Item <> nil do begin
a:=Item.Index; //Решение
ListView1.Items.Delete(a);
StringList.Delete(a);

for i:=0 to ListView4.Items.Count-1 do begin
if ListView4.Items[i].SubItems[3]=inttostr(a) then
ListView4.Items.Delete(i);
break;
end;

Item := ListView1.GetNextItem(Item, sdAll, [isSelected]);
end;
SeriesList.SaveToFile('log');
почему не работает удаление из ListView4?

Последний раз редактировалось Stilet; 14.10.2015 в 16:15.
fosiyepa вне форума Ответить с цитированием
Старый 14.10.2015, 16:10   #9
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,874
По умолчанию

Удалять нужно в обратном цикле for downto
northener вне форума Ответить с цитированием
Старый 14.10.2015, 16:15   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Рекомендую такой цикл:
Код:
for i:=ListView4.Items.Count-1 downto 0 begin
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Хранение кода программы в отдельном файле Crystallon Общие вопросы Delphi 3 02.05.2011 17:09
Хранение БД в одном файле D_E_N БД в Delphi 3 18.07.2009 14:01
Хранение текста в двоичном файле Nitrino Общие вопросы C/C++ 63 04.06.2009 02:46
Упорядоченное хранение в файле NSvirus Паскаль, Turbo Pascal, PascalABC.NET 1 03.06.2009 12:04
хранение данных в файле (dc++) AsabeasT Общие вопросы Delphi 2 27.03.2009 11:57