Finder_adventures |
Отправлено: 28.04.2005, 08:36 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 16
|
Подскажите пожалуйста, как прочитать из ini-файла несколько строк
и выводить их , например, в Memo ?
Я делаю обычным способом -... Value1= Ini->ReadString(Section1, Ident1,""); ... При этом читается только первая строка :-(
Как мне целиком забрать всё что принадлежит этому "Иденту" после
знака "равно" Ident1=
[Options1]
Ident1= Валера
Вася тра-та-та
Петя там-тамтттт
Маруся и-и-иах
|
|
AVC |
Отправлено: 28.04.2005, 09:23 |
|
Ветеран
Группа: Модератор
Сообщений: 1583
|
ReadSection
ReadSections
и прочее по методам в help |
|
Finder_adventures |
Отправлено: 28.04.2005, 15:53 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 16
|
Что-то не получается ...
крутил и так и этак -
функции ( ReadSection и ReadSections) и ReadSectionValues
Теперь просто появилась возможность выводить и названия всех
секций и идентификаторов + опять значения в первых строках ...
|
|
AVC |
Отправлено: 28.04.2005, 16:42 |
|
Ветеран
Группа: Модератор
Сообщений: 1583
|
Дошло. Извините сначала не правильно понял вопрос.
Если Value многострочный, то у меня получилось только руками или менять при записи символы новой строки на что то еще. А еще мне помнится, что длина строки в ini имеет ограничение.
|
|
Rius |
Отправлено: 28.04.2005, 19:11 |
|
Мастер участка
Группа: Участник
Сообщений: 321
|
Finder_adventures коли ищешь приключений на свою голову, попробуй формат XML, может полностью заменить ini.
AVC помниться под 98-й виндой какое-то ограничение встречал — толи строку в 1024 максимум символа, толи максимум 1024 строки...
а под WinXP все нормально.
|
|
Rius |
Отправлено: 28.04.2005, 19:24 |
|
Мастер участка
Группа: Участник
Сообщений: 321
|
Вот этот примерчик попроще будет:
чтение таблицы из XML текста и сохранение содержимого таблицы в XML
CODE | //---------------------------------------------------------------------------
void __fastcall TForm1::BSaveClick(TObject *Sender)
{
//Корневой элемент xml, создается новый
_di_IXMLNode MainNode = XMLDocument1->CreateNode(WideString("StringGrid"));
//и заменяет старый, чтобы удалить все предыдущие данные
XMLDocument1->DocumentElement = MainNode;
//Имеем: <StringGrid/>
//Записывается атрибут для хранения свойств этого нода (который "StringGrid")
//если атрибут не существует, он создается
MainNode->Attributes[WideString("cols")] = StringGrid1->ColCount;
MainNode->Attributes[WideString("rows")] = StringGrid1->RowCount;
//Имеем: <StringGrid cols="5" rows="5"></StringGrid>
//Перебор всех ячеек грида
for(int i=0; i<StringGrid1->ColCount; i++)
for(int j=0; j<StringGrid1->RowCount; j++)
{
//создается нод для хранения ячейки "Cell" методом добавления к корневому
//, точнее предыдущему, так как уровни вложенности вроде неограничены
_di_IXMLNode ValueNode = MainNode->AddChild(WideString("Cell"));
//Имеем: <Cell/>
//Записывается основное свойство
ValueNode->Text = WideString(StringGrid1->Cells[i][j]);
//Имеем например: <Cell>37</Cell>
ValueNode->Attributes[WideString("column")] = i;
ValueNode->Attributes[WideString("row")] = j;
//Имеем: <Cell column="0" row="2">37</Cell>
}
//Путь к файлу, куда сохранять
AnsiString filename = ExtractFileDir(Application->ExeName) + "\\data.xml";
//Сохранение в файл
XMLDocument1->SaveToFile(WideString(filename));
//Сохранение в строку AnsiString
AnsiString xmlbuf;
XMLDocument1->SaveToXML(xmlbuf);
RichEdit1->Lines->Clear();
RichEdit1->Lines->Add(xmlbuf);
//Эту строку можно легко записать в базу данных
}
//---------------------------------------------------------------------------
void __fastcall TForm1::BLoadClick(TObject *Sender)
{
//Путь к файлу
AnsiString filename = ExtractFileDir(Application->ExeName) + "\\data.xml";
//Загрузка структуры из файла
XMLDocument1->LoadFromFile(WideString(filename));
//Также можно грузить из AnsiString'а:
//XMLDocument1->LoadFromXML(AnsiString &)
//Получение корневого нода
_di_IXMLNode MainNode = XMLDocument1->DocumentElement;//->ChildNodes->GetNode(0);
//Получение его атрибутов, по умолчанию считается, что это нод "StringGrid"
//если не он — будет ошибка из-за отсутствия таких атрибутов
StringGrid1->ColCount = int(MainNode->Attributes[WideString("cols")]);//operator int()
StringGrid1->RowCount = int(MainNode->Attributes[WideString("rows")]);//operator int()
int count = XMLDocument1->ChildNodes->Count;//Количество дочерних нодов корня всего документа
//<?xml version="1.0" encoding="UTF-8" standalone="no"?> — 1-ый
//<!DOCTYPE SampleData SYSTEM "sth.dtd"> — 2-ой
//3-й — есть "StringGrid"
count = MainNode->ChildNodes->Count;//число дочерних нодов нашего корня "StringGrid"
Caption = count;
for(int i=0; i<count; i++)
{ //Перебор всех этих дочерних по индексу
_di_IXMLNode SGridNode = MainNode->ChildNodes->GetNode(i);
//Получение координат из аттрибутов
int x = int(SGridNode->Attributes[WideString("column")]);
int y = int(SGridNode->Attributes[WideString("row")]);
//Запись в грид
StringGrid1->Cells[x][y] = SGridNode->Text;
}
}
//---------------------------------------------------------------------------
|
|
|
Finder_adventures |
Отправлено: 29.04.2005, 10:50 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 16
|
Пасиба!! Попробую разобраться |
|