Сохранение историй из TMemo

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Сохранение историй из TMemo

Сообщение GAMER » 04.11.2008 14:27:23

Прошу совета.
Есть Мемо на форме. Нужно в файле хранить историю того, что там набиралось. Подскажите как лучше.
Текстовый не совсем подходит, ибо само Мемо может состоять из отдельных строк.
Аватара пользователя
GAMER
энтузиаст
 
Сообщения: 627
Зарегистрирован: 06.08.2008 13:41:07
Откуда: Ужгород-Днепр, Украина

Re: Сохранение историй из TMemo

Сообщение Vadim » 04.11.2008 14:34:18

GAMER писал(а):Текстовый не совсем подходит

А какой подходит, графический? :)
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Сохранение историй из TMemo

Сообщение GAMER » 04.11.2008 15:05:23

Vadim писал(а):
GAMER писал(а):Текстовый не совсем подходит

А какой подходит, графический? :)

Кроме текстовых файлов бывают еще типизированые.
Текстовым я называю файл, сотоящий из строчек, которые заканчиваются символами "конец строки, возврат каретки".

Добавлено спустя 2 часа 5 минут 56 секунд:
Кстати. Как правильно писать в бинарный файл текст с Мемо?
Аватара пользователя
GAMER
энтузиаст
 
Сообщения: 627
Зарегистрирован: 06.08.2008 13:41:07
Откуда: Ужгород-Днепр, Украина

Re: Сохранение историй из TMemo

Сообщение Vadim » 04.11.2008 17:30:51

Так если в ТМемо содержаться именно строки, то не логичнее ли сохранять строки в текстовый файл? Тем более, что у ТМемо для этого уже есть всё что нужно:
Код: Выделить всё
TMemo.Lines.SaveToFile();
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Сохранение историй из TMemo

Сообщение Mr.Smart » 04.11.2008 22:14:18

Не ну конечно можно писать в файл структурированный...
Создать запись типа набор символов
Код: Выделить всё
type
TRecord = record
   byte: array[0..255] of Char;
end;

и писать в файл. Тогда получится так называемый типизированный!(и не придерёшся).
Код: Выделить всё
var
j: Integer;
D: TRecord;
s: TFileStream;
begin
  s:=TFileStream.Create('Имя файла',fmCreate);
  for j:=0 to Memo.Lines.Count-1 do
   begin
    FillByte(D,SizeOf(D),0);
    D.byte:=Copy(Memo.Lines[j],1,255);
    s.Write(D,SizeOf(D));
   end;
  s.Free;
end;


Добавлено спустя 51 секунду:
А можно и не создавать :D
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: Сохранение историй из TMemo

Сообщение Brainenjii » 04.11.2008 23:23:24

не, как я понял - нужно сохранять не всё мемо, а только то что изменилось ^_^ В смысле, чтобы можно было определить - какие куски memo когда изменялись ^_^
Аватара пользователя
Brainenjii
энтузиаст
 
Сообщения: 1351
Зарегистрирован: 10.05.2007 00:04:46

Re: Сохранение историй из TMemo

Сообщение Mr.Smart » 04.11.2008 23:38:41

Brainenjii писал(а):не, как я понял - нужно сохранять не всё мемо, а только то что изменилось ^_^ В смысле, чтобы можно было определить - какие куски memo когда изменялись ^_^

Ну тут надо проявить нетривиальный алгоритм анализа изменений :oops: Дело то не в конкретном сохранении тогда....
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: Сохранение историй из TMemo

Сообщение Vadim » 05.11.2008 05:58:36

Тогда пусть вопросивший расскажет свою конкретную проблему, потому что тип файла - это уже армянское радио. :)
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Сохранение историй из TMemo

Сообщение GAMER » 05.11.2008 16:08:43

Vadim писал(а):Тогда пусть вопросивший расскажет свою конкретную проблему, потому что тип файла - это уже армянское радио. :)

Уточню.
Каждый раз в Мемо пишется что-либо, после этого обрабатывается все Мемо. Хочется хранить всю историю, что было обработано через Мемо. Действительно, не надо обрабатывать, куски изменений, все более тривиально.
Проблемы: посколько Мемо состоит из строк, то и в файл они пишутся построчечно. Как определить, какая строка принадлежит какому Мемо.
Пример. В Мемо написали:
строка1
строка2,
строка3
Обработали.
Опять написали:
строка4
строка5
строка6
Как узнать какая из строк принадлежит какой из обработок? Например, строка3 могла быть записана после первой обработки, а могла быть и после 3-й

Грубо говоря. Задача такая: В Мемо пишутся команды, которые выполняются. Нужно уметь вызывать их. То есь иметь историю выполнения команд. команди могут состоять из нескольких строк.

Думаю, что теперь задача понятна.

Для чего это? Хочу продемонстрировать клиент для работы с MySQL, при этом без использования компонент для работы с MySQL. Клиент графический.
Аватара пользователя
GAMER
энтузиаст
 
Сообщения: 627
Зарегистрирован: 06.08.2008 13:41:07
Откуда: Ужгород-Днепр, Украина

Re: Сохранение историй из TMemo

Сообщение Vadim » 05.11.2008 16:30:13

GAMER писал(а):Хочу продемонстрировать клиент для работы с MySQL

Ну так бы сразу и сказали. :) Нет ничего проще.
Создайте дополнительную таблицу с двумя полями - datetime и varchar (или blob). Datetime сделаете со значением по умолчанию как текущие дата-время. При каждом выполнении блока команд добавляете их в поле таблицы varchar.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Сохранение историй из TMemo

Сообщение GAMER » 05.11.2008 16:45:26

Vadim писал(а):
GAMER писал(а):Хочу продемонстрировать клиент для работы с MySQL

Ну так бы сразу и сказали. :) Нет ничего проще.
Создайте дополнительную таблицу с двумя полями - datetime и varchar (или blob). Datetime сделаете со значением по умолчанию как текущие дата-время. При каждом выполнении блока команд добавляете их в поле таблицы varchar.

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

И не все сервера дают разрешение на создание таблиц.
Аватара пользователя
GAMER
энтузиаст
 
Сообщения: 627
Зарегистрирован: 06.08.2008 13:41:07
Откуда: Ужгород-Днепр, Украина

Re: Сохранение историй из TMemo

Сообщение ViTality » 05.11.2008 17:20:02

ну к примеру возьми Tinifile
и пиши в него чтонить вида:
Код: Выделить всё
[ЗДЕСЬ_ДАТА_И_ВРЕМЯ]
cmd1="строка1"
cmd2="строка2"
cmd3="строка3"

[ЗДЕСЬ_ДАТА_И_ВРЕМЯ_2]
cmd1="строка4"
cmd2="строка5"
cmd3="строка6"




или в XML файл по томуже принципу
ViTality
постоялец
 
Сообщения: 308
Зарегистрирован: 05.10.2007 15:12:02

Re: Сохранение историй из TMemo

Сообщение GAMER » 05.11.2008 17:21:44

Спасибо за совет, не пробовал с таким работать. Буду разбираться.

Добавлено спустя 2 минуты 12 секунд:
Примерчик для Tinifile не завалялся случайно?
Аватара пользователя
GAMER
энтузиаст
 
Сообщения: 627
Зарегистрирован: 06.08.2008 13:41:07
Откуда: Ужгород-Днепр, Украина

Re: Сохранение историй из TMemo

Сообщение ViTality » 05.11.2008 18:06:16

Код: Выделить всё
var
  ini:TiniFile;
...
// пишем в файл
// 'General', 'Studs' это блоки/секции (то что в [])
// Fdatabase, Ffacf строковые переменные
// 'Database', 'FacultyFilter' ключи
  Ini := TIniFile.Create(ChangeFileExt(Application.ExeName,'.ini'));
  try
    ini.WriteString('General','Database',Fdatabase);
    ini.WriteString('Studs','FacultyFilter',Ffacf);
    ini.WriteString('Studs','SpecFilter',Fspecf);
  finally
    Ini.Free;
  end;

// читаем

  Ini := TIniFile.Create(ChangeFileExt(Application.ExeName,'.ini'));
  try
    Fdatabase:=ini.ReadString('General','Database','');
    Ffacf:=ini.ReadString('Studs','FacultyFilter','');
    Fspecf:=ini.ReadString('Studs','SpecFilter','');
  finally
    Ini.Free;
  end;
ViTality
постоялец
 
Сообщения: 308
Зарегистрирован: 05.10.2007 15:12:02

Re: Сохранение историй из TMemo

Сообщение Vadim » 05.11.2008 18:06:47

GAMER писал(а):И не все сервера дают разрешение на создание таблиц.

Мало того, не все сервера ещё и дают к себе подключаться. :)
GAMER писал(а):Примерчик для Tinifile не завалялся случайно?

Это примерчик завалялся прямо в примерчиках к FreePascal: Каталог_куда_Вы_поставили_FreePascal\demo\netware\nutmon.pp
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

След.

Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 40

Рейтинг@Mail.ru