Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2014.02.09;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.54 MB
Время: 0.003 c
3-1295420914
Дмитрий С
2011-01-19 10:08
2014.02.09
ВКонтакте: кто удалился?


15-1377376202
Юрий
2013-08-25 00:30
2014.02.09
С днем рождения ! 25 августа 2013 воскресенье


15-1377405567
Кирюха
2013-08-25 08:39
2014.02.09
Тяжело запилить свою БД?


1-1320579862
DmitriyG.
2011-11-06 14:44
2014.02.09
Regexp в бинарниках


2-1365140334
alexdn
2013-04-05 09:38
2014.02.09
Прорисовка в paintbox





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский