| 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
 
 
 
  
 | Пасиба!! Попробую разобраться | 
|  |