Форум: "Основная";
Текущий архив: 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]зачем показывать, себя умным?
Да мало ли зачем?
Я же не спрашиваю, зачем ты показываешь себя глупым.
← →
brother © (2011-11-18 11:36) [41]шибко глупым?
← →
brother © (2011-11-18 11:46) [42]подумай о своем поведении и своих словах, ладно?
← →
Медвежонок Пятачок © (2011-11-18 11:47) [43]ну смотри сам насколько :
стоит банальнейшая рутинная задача. читать некие настройки. это просто взять готовое и потратить минимум времени на реализацию.
но ты:
- придумываешь свой "контейнер".
- выбираешь неподходящий инструмент для работы с ним.
- пытаешься допилить этот инструмент.
- у тебя не получается
- ты идешь на форум.
и так далее.
вместо того, чтобы решать прикладную задачу, ты тратишь время на ерунду.
← →
brother © (2011-11-18 11:50) [44]> стоит банальнейшая рутинная задача. читать некие настройки
одна часть задачи, тк в контейнере еще много чего содержится...
> это просто взять готовое и потратить минимум времени на
> реализацию.
ты правда думаешь, что я на столько туп, что не смог бы разобраться с TIniFile???
← →
brother © (2011-11-18 11:53) [45]> - придумываешь свой "контейнер".
необходимость
> - выбираешь неподходящий инструмент для работы с ним.
к сожалению структура ini нужна
> - пытаешься допилить этот инструмент.
не допилить, а расширить функции
> - у тебя не получается
все получается, уточнил, для самоспокойствия
> - ты идешь на форум.
это карается?
Я прекращаю прения с тобой.
зы. ну не получается у тебя казаться умнее других...
← →
DVM © (2011-11-18 11:56) [46]Да успокойтесь вы горячие финские парни.
Вообще я в вопросе brother изначально не видел ничего странного.
Допустим, что ему откуда то (ну например из blob поля базы) сваливается TMemoryStream, содержащий по сути текст, причем имеющий структуру, аналогичную INI. Эту структуру надо прочитать. Само собой разумеется, первое что приходит в голову, воспользоваться TIniFile. Но он не поддерживает считываение из потока. В промежуточный файл сохранять не хочется. Вот и вопрос.
Что странного Пятачок?
← →
Медвежонок Пятачок © (2011-11-18 11:57) [47]ты правда думаешь, что я на столько туп, что не смог бы разобраться с TIniFile???
я думаю, что ты туп. но не потому что не сможешь или не сможешь разобраться с ини.
а потому, что ты придумал контейнер и решил читать его через тини.
придумал сам себе проблему, и героически ее решаешь.
← →
Медвежонок Пятачок © (2011-11-18 11:58) [48]Что странного Пятачок?
работаю с файлами контейнерами (свой формат),
Вот это и есть странное.
← →
Медвежонок Пятачок © (2011-11-18 11:59) [49]> - придумываешь свой "контейнер".
необходимость
это заблуждение. в своем контейнере нет ни малейшей необходимости (кроме личной тупости)
← →
brother © (2011-11-18 12:00) [50]прочитай [46] еще раз и успокойся уже...
зы спасибо DVM, что показал альтернативный пример...
← →
Медвежонок Пятачок © (2011-11-18 12:01) [51]ты вроде уже прекратил со мной общение.
и все равно тянет?
Это хорошо. С умным человеком полезно общаться.
← →
brother © (2011-11-18 12:01) [52]> в своем контейнере нет ни малейшей необходимости
откуда такая мысль, пожалуйста подробнее...
> (кроме личной тупости)
ты опять на личности переходишь?
← →
brother © (2011-11-18 12:02) [53]> и все равно тянет?
> горячие финские парни
видимо да)
← →
Медвежонок Пятачок © (2011-11-18 12:02) [54]откуда такая мысль, пожалуйста подробнее...
Оттуда, что если бы это было необходимостью, то все придумывали бы свои контейнеры. А это не так.
Значит и необходимости нет.
← →
brother © (2011-11-18 12:03) [55]> что если бы это было необходимостью, то все придумывали
> бы свои контейнеры. А это не так.
ясно: этого не может быть, тк этого не может быть...
← →
Медвежонок Пятачок © (2011-11-18 12:05) [56]ясно: этого не может быть, тк этого не может быть...
все проще.
этого просто нет. не все придумывают собственные контейнеры для банального хранения настроек.
попробуй оспорь.
← →
brother © (2011-11-18 12:08) [57]> собственные контейнеры для банального хранения настроек
еслиб это были банальные настройки, был бы TIniFile
в моем случаее: хранятся не только настройки, но и много чего еще (аудио, имаджи, другие специализированные файлы)...
← →
Медвежонок Пятачок © (2011-11-18 12:14) [58]да не имеет значения что хранится.
у многих хранится многое.
и далеко не все придумывают "контейнеры"
необходимости в них нет.
← →
RWolf © (2011-11-18 12:15) [59]ну так раз это не банальные настройки, разумно было бы выбрать подходящий формат для хранения данных, не?
таких форматов в нашем распоряжении немного: встроенная в Delphi сериализация объектов либо XML.
можно ещё JSON подтянуть, но это нужно подключать сторонние библиотеки.
Страницы: 1 2 вся ветка
Форум: "Основная";
Текущий архив: 2014.02.09;
Скачать: [xml.tar.bz2];
Память: 0.6 MB
Время: 0.003 c