Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2014.02.09;
Скачать: CL | DM;

Вниз

TIniStream реальность?   Найти похожие ветки 

 
brother ©   (2011-11-18 10:01) [0]

Работаю с файлами: структура INI, необходимо чтение данных, файл нужно держать в памяти (TMemoryStream)
Есть ли подобный компонент TIniStream? или придется реализовывать самому?


 
DVM ©   (2011-11-18 10:05) [1]


> структура INI


> файл нужно держать в памяти

TMemoryIniFile ???


 
brother ©   (2011-11-18 10:09) [2]

TMemIniFile нашел, но не до конца понял, он грузит из файла, а мне нужно из TMemoryStream он это умеет?


 
brother ©   (2011-11-18 10:12) [3]

идея: держать структуру TIniFile в памяти и читать нужные секции и значения по необходимости...


 
Медвежонок Пятачок ©   (2011-11-18 10:13) [4]

А типа сейчас ты работая с ТИнифайлом работаешь не с ним, а с физическим файлом. делаешь фопен, сик и так далее....


 
brother ©   (2011-11-18 10:14) [5]

> с физическим файлом. делаешь фопен, сик и так далее....

имхо да, тока с их обертками О_о или это не так?


 
brother ©   (2011-11-18 10:17) [6]

хм...
http://valeevildar.blogspot.com/2009/09/delphi-tmeminifile.html


 
Anatoly Podgoretsky ©   (2011-11-18 10:18) [7]

> brother  (18.11.2011 10:01:00)  [0]

StringStream


 
DVM ©   (2011-11-18 10:20) [8]


> brother ©   (18.11.11 10:12) [3]


> а мне нужно из TMemoryStream он это умеет?

Можно научить. Посмотри, в TMemoryIniFile есть такой приватный метод:


procedure TMemIniFile.LoadValues;
var
 List: TStringList;
begin
 if (FileName <> "") and FileExists(FileName) then
 begin
   List := TStringList.Create;
   try
     List.LoadFromFile(FileName);
     SetStrings(List);
   finally
     List.Free;
   end;
 end
 else
   Clear;
end;


К сожалению, не виртуальный. LoadFromFile заменяем на LoadFromStream и получаем то что тебе нужно. Еще аналогично можно подправить


procedure TMemIniFile.UpdateFile;
var
 List: TStringList;
begin
 List := TStringList.Create;
 try
   GetStrings(List);
   List.SaveToFile(FFileName);
 finally
   List.Free;
 end;
end;


Ну и в конструкторе переделать, передавать туда TStream.

Т.е возмит за основу TMemIniFile и напиши свой класс.


 
brother ©   (2011-11-18 10:22) [9]

да придется чуть править TMemIniFile

procedure TForm1.Button1Click(Sender: TObject);
var
 ini: TMemIniFile;
begin
 ini:=TMemIniFile.Create("");
 try
   ini.WriteString("ini_section","parameter1","value");
   memo1.Lines.Add(ini.ReadString("ini_section","parameter1",""));
 finally
//    ini.UpdateFile;
   ini.Free;
 end;
end;

главное, что тут можно не указывать имя файла, если не планируется сохранение!


 
Медвежонок Пятачок ©   (2011-11-18 10:23) [10]

имхо да, тока с их обертками О_о или это не так?

Обычный TIni:
Создал экземпляр, сохранил переменную юзаешь.

Необычный ини:
Создал экземпляр, сохранил в переменную, открыл физическийц ини, прочитал в какой-то там стрим, закачал в необычный ини, юзаешь. + Потерял нотификации системы об изменениях в физическом ини.

Вопрос:
в чем была мега-идея-то?
просто заморочиться?


 
brother ©   (2011-11-18 10:28) [11]

> в чем была мега-идея-то?

[3]


 
Медвежонок Пятачок ©   (2011-11-18 10:30) [12]

идея: держать структуру TIniFile в памяти и читать нужные секции и значения по необходимости...

Ты вообще интересовался вопросом, каким образом винда работает с ини файлами?
Перед тем как придумывать свой улучшайзер?
Или просто поковырял в носу и решил что у тебя будет лучше?


 
brother ©   (2011-11-18 10:33) [13]

теперь да, вопрос исчерпан. всем спасибо!


 
brother ©   (2011-11-18 10:35) [14]

зы.

> и решил что у тебя будет лучше

вот от этого как раз и хотел максимально избавиться!


 
DVM ©   (2011-11-18 10:36) [15]


> brother ©   (18.11.11 10:35) [14]


> вот от этого как раз и хотел максимально избавиться!

От чего избавиться?


 
brother ©   (2011-11-18 10:38) [16]

изобретение своего велосипеда, использовать стандартные средства по максимуму, но видимо без написания своего
LoadFromStream не обойтись.


 
Медвежонок Пятачок ©   (2011-11-18 10:40) [17]

Мужик, ты немного порефлексируй над своими желаниями.
Почему может возникнуть желание считать файл в память один раз?
Потому что не хочется открывать этот файл несколько раз.
А почему оно возникло у тебя?
Потому что ты думаешь, что Tini, каждый раз, когда ты читаешь значение из ини , открывает файл заново и затем закрывает его. И так каждый раз.


 
brother ©   (2011-11-18 10:46) [18]

эх, до чего ж ты упертый, объясню еще раз:
Есть TMemoryStream содержащий в себе структуру Ini, фактически, файла со структурой TIniFile нет.
Задумался, как лучше работать со структурой ini в TMemoryStream...
Пришел к выводу в посте [9] с небольшим допилом, те велосипед будет (LoadFromStream), но минимальный.
Профит!


 
Anatoly Podgoretsky ©   (2011-11-18 10:55) [19]

> brother  (18.11.2011 10:46:18)  [18]

ИНИ файл системой полностью считывается в память, потом работа ведется с
памятью.
Поэтому не понятна задача писать велосипед.


 
Медвежонок Пятачок ©   (2011-11-18 10:57) [20]

Сначала:

Работаю с файлами: структура INI, необходимо чтение данных, файл нужно держать в памяти

Сейчас:

Есть TMemoryStream


 
brother ©   (2011-11-18 10:58) [21]

> ИНИ файл

блин, файла нет! есть только стрим, как со стримом работать?


 
Медвежонок Пятачок ©   (2011-11-18 11:01) [22]

> с физическим файлом. делаешь фопен, сик и так далее....

имхо да, тока с их обертками О_о или это не так?


Что и требовалось доказать.
У чувака есть ини файл на диске и оно думает, что файло открывается и закрывается классом инифайл каждый раз, когда оно оттуда что-то читает.


 
Медвежонок Пятачок ©   (2011-11-18 11:01) [23]

есть только стрим,

Если файла нет, то стрим будет пустой


 
RWolf ©   (2011-11-18 11:03) [24]


>  файла нет! есть только стрим

почему бы не организовать временный файл и выгрузить в него стрим?
где-нибудь в %TEMP%.


 
brother ©   (2011-11-18 11:04) [25]

> Работаю с файлами: структура INI, необходимо чтение данных,
> файл нужно держать в памяти

читать как:
работаю с файлами контейнерами (свой формат), читаю из контейнера структуру ini в стрим, после чтения, необходимо добраться до структуры ini и прочитать необходимые значения.

> Сейчас:
>
> Есть TMemoryStream

да сейчас уточнил как есть...


 
Медвежонок Пятачок ©   (2011-11-18 11:04) [26]

да есть у него файл. уже доказано наукой.


 
Медвежонок Пятачок ©   (2011-11-18 11:07) [27]

читать как:
работаю с файлами контейнерами (свой формат), читаю из контейнера структуру ini в стрим,


на самом деле читать так:
я придумал велосипед с квадратными колесами, создал их десять штук и поместил в коробку из под холодильника. Идея: когда вынимаешь велосипед из коробки, надо чтобы колеса делались круглыми.


 
brother ©   (2011-11-18 11:07) [28]

> почему бы не организовать временный файл и выгрузить в него
> стрим?

нет! от этого и хочу отказаться...

> Если файла нет, то стрим будет пустой

нет! см [9], файла нет, а TMemIniFile уже не пустой (это для примера). TMemIniFile можем принимать как TMemoryStream по сути(те работаем с паматью, а не с файлом)?


 
Медвежонок Пятачок ©   (2011-11-18 11:09) [29]

нет! от этого и хочу отказаться...


Отказываться надо от контейнера и напёханных в него псевдо-ини структур.


 
brother ©   (2011-11-18 11:09) [30]

[27] сколько можно оффтопа?


 
brother ©   (2011-11-18 11:10) [31]

> Отказываться надо от контейнера и напёханных в него псевдо-
> ини структур.

ты мне будешь говорить, что делать? ты хоть на один мой вопрос нормально по теме ответил?


 
Медвежонок Пятачок ©   (2011-11-18 11:12) [32]

на дурацкие вопросы есть кому отвечать без меня.
а я тебе сознание хочу просветлить.


 
brother ©   (2011-11-18 11:17) [33]

> а я тебе сознание хочу просветлить.

ты считаешь, я безумен? мой подход? зачем лезть, если не вкурсе, что требуется реализовать?
по реализации возник вопрос - я спросил, привел пример, все для себя выяснил, в [9] привел выводы.
[10] и дальнейшие твои посты начинаются уже твои мысли по моей теме: зачем, велосипед, отказаться итп...


 
Медвежонок Пятачок ©   (2011-11-18 11:26) [34]

я в курсе чего требуется реализовать.

ты хочешь хранить и читать настройки.
ты выбрал структуру хранение и класс для чтения.
и выбрал неудачно, потому что класс не умеет загружаться из структуры.
вот и вся философия.

и вместо того, чтобы выбрать другую структуру и другой класс которые любят друг друга, ты в муках рожаешь костыли для неудачно выбранного класса.


 
Медвежонок Пятачок ©   (2011-11-18 11:29) [35]

навскидку:
банальный стринлист с Names и Values все уже умеет.

Но в нем нет секций.
Зато есть xml в котором секций сколько хочешь.

да мало ли чего еще есть, если подходить к выбору инструментов с умом.


 
DVM ©   (2011-11-18 11:31) [36]


> Зато есть xml в котором секций сколько хочешь.

Я ждал этого!!! :) Странно, что всплыло только на 35 посте. :)


 
brother ©   (2011-11-18 11:31) [37]

> и выбрал неудачно, потому что класс не умеет загружаться
> из структуры.

мой класс, вот я это и реализую... что не понятно? зачем показывать, себя умным?
приведи пример своего класса, я посмотрю, если мне подойдет, приму. Пока все твои слова оффтоп, сколько можно то? кайф пословоблудить?


 
Медвежонок Пятачок ©   (2011-11-18 11:33) [38]

А я ждал этого

Я ждал этого!!! :)

но думал, что пройдет от силы секунд 15.


 
brother ©   (2011-11-18 11:33) [39]

> Зато есть xml в котором секций сколько хочешь.

я знаю, что он любитель xml) сам в шоке, что только на 36 посте начал его двигать)


 
Медвежонок Пятачок ©   (2011-11-18 11:35) [40]

зачем показывать, себя умным?

Да мало ли зачем?
Я же не спрашиваю, зачем ты показываешь себя глупым.



Страницы: 1 2 вся ветка

Текущий архив: 2014.02.09;
Скачать: CL | DM;

Наверх




Память: 0.56 MB
Время: 0.009 c
2-1365225447
Windows 8
2013-04-06 09:17
2014.02.09
Access Violation на этой операционной системе


2-1365524535
robt
2013-04-09 20:22
2014.02.09
exception


11-1249461142
Jon
2009-08-05 12:32
2014.02.09
OnClick Perform Message


2-1365248739
Den
2013-04-06 15:45
2014.02.09
Форматирование исходного кода?


15-1377522246
Псевдо-Дельфи-Мастер.
2013-08-26 17:04
2014.02.09
Книги по STALKER у.