C++Builder
  Начало   Форум   Помощь Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: Поиск дубликатов в INI файле  (Прочитано 2096 раз)
SilverFish
Участник


Сказали спасибо: +14/-6
Offline

Сообщений: 786


Поиск дубликатов в INI файле
« : 30 Июль 2014, 16:50:41 »

Подскажите, пожалуйста, правильную методику определить что в файле INI есть одинаковые секции?
Например:
[FILE1]
time=08:00:00

[FILE2]
time=13:00:00

[FILE1]
time=14:00:00

Здесь две секции с одним и тем же именем [FILE1]. Надо предупредить об этом пользователя.
Записан
d7d1cd
Участник


Сказали спасибо: +59/-24
Offline

Сообщений: 1005


Re: Поиск дубликатов в INI файле
« Ответ #1 : 30 Июль 2014, 16:56:10 »

Хм... А при чтении данной дублированной секции что будет прочитано? Первая по ходу секция?
Записан
SilverFish
Участник


Сказали спасибо: +14/-6
Offline

Сообщений: 786


Re: Поиск дубликатов в INI файле
« Ответ #2 : 31 Июль 2014, 00:46:10 »

Программа просто должна определить если ли дубликаты секций [...] в файле. Не важно в каком порядке они расположены.
Записан
S0mbre
Глобальный модератор


Сказали спасибо: +1113/-22
Offline

Сообщений: 2132

S0mbre


Re: Поиск дубликатов в INI файле
« Ответ #3 : 31 Июль 2014, 10:14:43 »

См. TIniFile::ReadSections() - записывает имена секций ini-файла в передаваемый параметр (TStrings*). Далее тривиально:
Код
std::unique_ptrTStringList> slSections(new TStringList());
MyIni->ReadSections(slSections.get());
const int sz = slSections->Count;
std::unique_ptrTStringList> slSections1(new TStringList());
slSections1->Duplicates = dupIgnore;
for(int i=0; isz; i++) slSections1->Add(slSections->Strings[i]);
if(slSections1->Count sz) {
  ShowMessage("Файл содержит дублирующиеся секции!");
}
 
Записан
SilverFish
Участник


Сказали спасибо: +14/-6
Offline

Сообщений: 786


Re: Поиск дубликатов в INI файле
« Ответ #4 : 31 Июль 2014, 12:13:22 »

Спасибо!
Записан
S0mbre
Глобальный модератор


Сказали спасибо: +1113/-22
Offline

Сообщений: 2132

S0mbre


Re: Поиск дубликатов в INI файле
« Ответ #5 : 01 Август 2014, 06:07:39 »

Да, можно и без второго списка реализовать:
Код
std::unique_ptrTStringList> slSections(new TStringList());
MyIni->ReadSections(slSections.get());
const int sz = slSections->Count;
slSections->Sorted = true;
for(int i=0; isz; i++) {
  if(i > 0 && slSections->Strings[i] == slSections->Strings[i-1]) {
     ShowMessage("Файл содержит дублирующиеся секции!");
     break;
  }
}
 
« Последнее редактирование: 03 Август 2014, 15:32:19 от S0mbre » Записан
SilverFish
Участник


Сказали спасибо: +14/-6
Offline

Сообщений: 786


« Ответ #6 : 01 Август 2014, 17:33:21 »

Красиво, спасибо.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  




....

Powered by SMF 1.1.21 | SMF © 2025, Simple Machines
Страница сгенерирована за 0.082 секунд. Запросов: 19.