Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++ Builder
Войти
Регистрация
Восстановить пароль
 
Janeylovan
0 / 0 / 0
Регистрация: 02.12.2014
Сообщений: 5
#1

Запись комментария в ini - C++ Builder

02.12.2014, 18:01. Просмотров 733. Ответов 16
Метки нет (Все метки)

C++
1
Ini->WriteString("Название секции","Имя переменной", "значение");
как сделать чтобы записался комментарий в ini файл?
Ничего не нашел похожего
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.12.2014, 18:01
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Запись комментария в ini (C++ Builder):

ini запись в Windows
Как бороться подскажите есть программка с ini файлом простая при закрытии...

Запись и чтение *.ini
Здравствуйте. Вот код записи в *.ini файл:...

Запись строк из DBGrig в INI файл с возможностью дозаписывать
Добрый вечер уважаемые специалисты, помогите новичку разобраться с кодом. Я...

Сохранение TrackBar->Position в ini, ошибка (unable to write to options.ini)
TIniFile *Ini = new TIniFile("options.ini"); void __fastcall...

INI - ошибка "Unable to write to resourse/options.ini"
нужна помощь касательно работы с файлами конфигурации (*.ini) Постановка...

INI Файл и Стиль Шрифта - как сохранить в INI стиль шрифта.
Всем привет. :) Хочу к своей программе сделать, чтобы она умела хранить...

16
demon_7
259 / 191 / 60
Регистрация: 12.05.2013
Сообщений: 856
02.12.2014, 18:16 #2
Janeylovan, вот так устроит?
C++
1
Ini->WriteString("Название секции","Имя переменной", "комментарий");
0
Janeylovan
0 / 0 / 0
Регистрация: 02.12.2014
Сообщений: 5
02.12.2014, 18:28  [ТС] #3
Цитата Сообщение от demon_7 Посмотреть сообщение
Janeylovan, вот так устроит?
Код C++
1
Ini->WriteString("Название секции","Имя переменной", "комментарий");


Проблема в том надо чтобы не писало: "Название секции" и "Имя переменной"
А чтобы был один комментарий

[Название секции]
Имя переменной=Привет

Добавлено через 3 минуты
Вот компилирует
C++
1
Ini->WriteString("","", "комментарий");;
[]
=Привет

Так нет
C++
1
Ini->WriteString( "комментарий");;
0
demon_7
259 / 191 / 60
Регистрация: 12.05.2013
Сообщений: 856
02.12.2014, 18:34 #4
Ну все правильно. Так построена структура ini файлов, есть наименование секции, имя "переменной", значение.
А для ваших целей просто сохраните строковую переменную в в файл "test.ini"
C++
1
 Memo1->Lines->SaveToFile("test.ini");
Либо тоже самое может сделать TStringList
0
Evg
Эксперт CАвтор FAQ
18938 / 6899 / 513
Регистрация: 30.03.2009
Сообщений: 19,441
Записей в блоге: 30
02.12.2014, 18:42 #5
ТС хочет, чтобы ini-файл был вида

[Название секции]
# комментарий
Имя переменной=Привет

Такого TIniFile нету. Ибо подразумевается, что подобные файлы будут обрабатываться исключительно программой, а не человеком. А программе комментарий не нужен. Читерские варианты типа записать переменную с именем "# комментарий" не канают, т.к. нет гарантии, что он в файле появится в нужном месте

Добавлено через 47 секунд
Цитата Сообщение от demon_7 Посмотреть сообщение
А для ваших целей просто сохраните строковую переменную в в файл "test.ini"
Думается, тут тоже получится не то, потому что комментарий нужен в конкретном месте, а не абы где
1
demon_7
259 / 191 / 60
Регистрация: 12.05.2013
Сообщений: 856
02.12.2014, 18:47 #6
Цитата Сообщение от Evg Посмотреть сообщение
ТС хочет,
Цитата Сообщение от Janeylovan Посмотреть сообщение
сделать чтобы записался комментарий в ini файл?
Конкретики о структуре файла и прочего ТС не дает, поэтому и советы мягко говоря не особо полезные, но при буквоедстве удовлетворяющие поставленные задачи.
0
demmax2004
116 / 138 / 46
Регистрация: 31.10.2014
Сообщений: 721
Записей в блоге: 1
02.12.2014, 18:48 #7
Все такие велосипеды сводятся к использованию TStringList
0
Janeylovan
0 / 0 / 0
Регистрация: 02.12.2014
Сообщений: 5
02.12.2014, 18:52  [ТС] #8
Цитата Сообщение от demon_7 Посмотреть сообщение
Ну все правильно. Так построена структура ini файлов, есть наименование секции, имя "переменной", значение.
А для ваших целей просто сохраните строковую переменную в в файл "test.ini"
Код C++
1
*Memo1->Lines->SaveToFile("test.ini");
Либо тоже самое может сделать TStringList
Когда все настройки записались в ini меняется расширение на cfg
Мне нужен комментарий не на форме а в самом файле

P.S
memo - это комментарий на форме
0
Evg
Эксперт CАвтор FAQ
18938 / 6899 / 513
Регистрация: 30.03.2009
Сообщений: 19,441
Записей в блоге: 30
02.12.2014, 18:53 #9
Цитата Сообщение от demon_7 Посмотреть сообщение
Конкретики о структуре файла и прочего ТС не дает
Подозреваю, что речь идёт о TIniFile (или как там оно называется). Т.е. готовое решение, а не самодельныая реализация
0
demon_7
259 / 191 / 60
Регистрация: 12.05.2013
Сообщений: 856
02.12.2014, 18:56 #10
Evg, Мы с Вами пока что только и можем подозревать что и как нужно.
Пора все таки определиться.Janeylovan, Уважаемый ТС, приведите пример наполнения файла, каким вы хотите его видеть. И откуда берется комментарий (он в единственном числе или нет)
0
Janeylovan
0 / 0 / 0
Регистрация: 02.12.2014
Сообщений: 5
02.12.2014, 19:02  [ТС] #11
Цитата Сообщение от Evg Посмотреть сообщение
Подозреваю, что речь идёт о TIniFile (или как там оно называется). Т.е. готовое решение, а не самодельныая реализация
Всё готово только проблема с этим
Такое я сам видел что программа пишет коментарий в при том на нужной строке

Добавлено через 4 минуты
Вот так должен выглядеть файл:

[SETTINGS]
Parameter=1

//Вот здесь комментарий
0
demmax2004
116 / 138 / 46
Регистрация: 31.10.2014
Сообщений: 721
Записей в блоге: 1
02.12.2014, 19:32 #12
Это самодельный парсер ini файлов
0
gumi250
431 / 398 / 57
Регистрация: 06.02.2012
Сообщений: 1,373
02.12.2014, 23:29 #13
Пиши как обычный текст в мемо и сохрани содержимое мемо в файл с расширением ини. Вот только как потом это читать.
0
SatanaXIII
Супер-модератор
Эксперт С++
5765 / 2763 / 374
Регистрация: 01.11.2011
Сообщений: 6,717
Завершенные тесты: 1
03.12.2014, 09:21 #14
Как на счет двухпроходной записи в файл?
1) Стандартными средствами работы с Ini заполняются все секции. В требуемых местах комментарий предваряется спецсимволом.
2) Файл открывается как обычный текстовый и перезаписывается, стирая все спецсимволы.

До:
[Название секции]
Спецсимвол=комментарий
Имя переменной=Привет


После:
[Название секции]
#комментарий
Имя переменной=Привет
0
BRcr
4015 / 2305 / 291
Регистрация: 03.02.2011
Сообщений: 5,064
Записей в блоге: 10
03.12.2014, 11:54 #15
А зачем стирать спецсимвол? Пусть себе остается. Зато уж будет полноценный ini. И овцы сыты и волки целы.
0
Janeylovan
0 / 0 / 0
Регистрация: 02.12.2014
Сообщений: 5
03.12.2014, 12:07  [ТС] #16
Цитата Сообщение от SatanaXIII Посмотреть сообщение
Как на счет двухпроходной записи в файл?
1) Стандартными средствами работы с Ini заполняются все секции. В требуемых местах комментарий предваряется спецсимволом.
2) Файл открывается как обычный текстовый и перезаписывается, стирая все спецсимволы.
До:
[Название секции]
Спецсимвол=комментарий
Имя переменной=Привет
После:
[Название секции]
#комментарий
Имя переменной=Привет
Приведите пожалуйста пример как это можно реализовать
0
SatanaXIII
Супер-модератор
Эксперт С++
5765 / 2763 / 374
Регистрация: 01.11.2011
Сообщений: 6,717
Завершенные тесты: 1
03.12.2014, 13:57 #17
На коленке:
C++
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
void __fastcall TForm1::Button1Click(TObject *Sender)
{
const String FilePathAndName = "D:/CommentIni.ini";
//Фаза 1:
TIniFile *iF = new TIniFile( FilePathAndName );
 
const String SectionNotFatal    = "Не смертельные виды убийств человеков-пауков",
             SectionMortally    = "Смертельные",
             Comment            = "SPIDERHELL^_^"; // <- Суперуникальный ключ-маркер
 
int countMortal(0), countNot(0), countC(0);
 
iF->WriteString( SectionNotFatal,       ++countNot,     "Выстрел с базуки"      );
iF->WriteString( SectionNotFatal,       ++countNot,     "Завалить небоскребом"  );
iF->WriteString( SectionNotFatal,       Comment + IntToStr( ++countC ),   "Недостаточно жестоко"  );
iF->WriteString( SectionNotFatal,       Comment + IntToStr( ++countC ),   "Более того - недостаточно кроваво"  );
iF->WriteString( SectionNotFatal,       ++countNot,     "Поставить подножку"    );
 
iF->WriteString( SectionMortally,       ++countMortal,  "По голове бац"         );
iF->WriteString( SectionMortally,       Comment + IntToStr( ++countC ),   "Самый кровавый"        );
 
delete iF;
 
// Фаза 2:
TStringList *sl = new TStringList();
sl->LoadFromFile( FilePathAndName );
for( int count=0; count<sl->Count; count++ )
  if( sl->Strings[count].Pos( Comment ) )
    sl->Strings[count] = "#" + sl->Strings[count].Delete( 1,
                                                          sl->Strings[count].Pos( "=" ) );
 
sl->SaveToFile( FilePathAndName );
delete sl;
}
0
03.12.2014, 13:57
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.12.2014, 13:57
Привет! Вот еще темы с решениями:

Шифровка INI
Народ, дайте кодик на шифровку и дешифровку INI файла. Кстати, а кайо метод...

Ini файлы
Как в .ini записать свойства компонента, чтоб при повторном запуске программа...

Ini-file
Скажите пожалуйста! Можно ли сохранять в Ini фаил данные типа float? Поясняю:...

Снова INI
Доброго времени суток! Помогите решить задачку. void __fastcall...


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

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

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