Сохранение историй из TMemo
Модератор: Модераторы
- GAMER
- энтузиаст
- Сообщения: 627
- Зарегистрирован: 06.08.2008 13:41:07
- Откуда: Ужгород-Днепр, Украина
- Контактная информация:
Сохранение историй из TMemo
Прошу совета.
Есть Мемо на форме. Нужно в файле хранить историю того, что там набиралось. Подскажите как лучше.
Текстовый не совсем подходит, ибо само Мемо может состоять из отдельных строк.
Есть Мемо на форме. Нужно в файле хранить историю того, что там набиралось. Подскажите как лучше.
Текстовый не совсем подходит, ибо само Мемо может состоять из отдельных строк.
GAMER писал(а):Текстовый не совсем подходит
А какой подходит, графический?
- GAMER
- энтузиаст
- Сообщения: 627
- Зарегистрирован: 06.08.2008 13:41:07
- Откуда: Ужгород-Днепр, Украина
- Контактная информация:
Vadim писал(а):GAMER писал(а):Текстовый не совсем подходит
А какой подходит, графический?
Кроме текстовых файлов бывают еще типизированые.
Текстовым я называю файл, сотоящий из строчек, которые заканчиваются символами "конец строки, возврат каретки".
Добавлено спустя 2 часа 5 минут 56 секунд:
Кстати. Как правильно писать в бинарный файл текст с Мемо?
Так если в ТМемо содержаться именно строки, то не логичнее ли сохранять строки в текстовый файл? Тем более, что у ТМемо для этого уже есть всё что нужно:
Код: Выделить всё
TMemo.Lines.SaveToFile();Не ну конечно можно писать в файл структурированный...
Создать запись типа набор символов
и писать в файл. Тогда получится так называемый типизированный!(и не придерёшся).
Добавлено спустя 51 секунду:
А можно и не создавать
Создать запись типа набор символов
Код: Выделить всё
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 секунду:
А можно и не создавать
- Brainenjii
- энтузиаст
- Сообщения: 1351
- Зарегистрирован: 10.05.2007 00:04:46
не, как я понял - нужно сохранять не всё мемо, а только то что изменилось ^_^ В смысле, чтобы можно было определить - какие куски memo когда изменялись ^_^
Brainenjii писал(а):не, как я понял - нужно сохранять не всё мемо, а только то что изменилось ^_^ В смысле, чтобы можно было определить - какие куски memo когда изменялись ^_^
Ну тут надо проявить нетривиальный алгоритм анализа изменений
Тогда пусть вопросивший расскажет свою конкретную проблему, потому что тип файла - это уже армянское радио. 
- GAMER
- энтузиаст
- Сообщения: 627
- Зарегистрирован: 06.08.2008 13:41:07
- Откуда: Ужгород-Днепр, Украина
- Контактная информация:
Vadim писал(а):Тогда пусть вопросивший расскажет свою конкретную проблему, потому что тип файла - это уже армянское радио.
Уточню.
Каждый раз в Мемо пишется что-либо, после этого обрабатывается все Мемо. Хочется хранить всю историю, что было обработано через Мемо. Действительно, не надо обрабатывать, куски изменений, все более тривиально.
Проблемы: посколько Мемо состоит из строк, то и в файл они пишутся построчечно. Как определить, какая строка принадлежит какому Мемо.
Пример. В Мемо написали:
строка1
строка2,
строка3
Обработали.
Опять написали:
строка4
строка5
строка6
Как узнать какая из строк принадлежит какой из обработок? Например, строка3 могла быть записана после первой обработки, а могла быть и после 3-й
Грубо говоря. Задача такая: В Мемо пишутся команды, которые выполняются. Нужно уметь вызывать их. То есь иметь историю выполнения команд. команди могут состоять из нескольких строк.
Думаю, что теперь задача понятна.
Для чего это? Хочу продемонстрировать клиент для работы с MySQL, при этом без использования компонент для работы с MySQL. Клиент графический.
GAMER писал(а):Хочу продемонстрировать клиент для работы с MySQL
Ну так бы сразу и сказали.
Создайте дополнительную таблицу с двумя полями - datetime и varchar (или blob). Datetime сделаете со значением по умолчанию как текущие дата-время. При каждом выполнении блока команд добавляете их в поле таблицы varchar.
- GAMER
- энтузиаст
- Сообщения: 627
- Зарегистрирован: 06.08.2008 13:41:07
- Откуда: Ужгород-Днепр, Украина
- Контактная информация:
Vadim писал(а):GAMER писал(а):Хочу продемонстрировать клиент для работы с MySQL
Ну так бы сразу и сказали.Нет ничего проще.
Создайте дополнительную таблицу с двумя полями - datetime и varchar (или blob). Datetime сделаете со значением по умолчанию как текущие дата-время. При каждом выполнении блока команд добавляете их в поле таблицы varchar.
Это конечно хорошо, но историю хочу хранить локально, ибо клиент может подключаться к разным серверам, а историю хочется иметь одну, общую для клиента.
И не все сервера дают разрешение на создание таблиц.
ну к примеру возьми Tinifile
и пиши в него чтонить вида:
или в XML файл по томуже принципу
и пиши в него чтонить вида:
Код: Выделить всё
[ЗДЕСЬ_ДАТА_И_ВРЕМЯ]
cmd1="строка1"
cmd2="строка2"
cmd3="строка3"
[ЗДЕСЬ_ДАТА_И_ВРЕМЯ_2]
cmd1="строка4"
cmd2="строка5"
cmd3="строка6"
или в XML файл по томуже принципу
Код: Выделить всё
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;
GAMER писал(а):И не все сервера дают разрешение на создание таблиц.
Мало того, не все сервера ещё и дают к себе подключаться.
GAMER писал(а):Примерчик для Tinifile не завалялся случайно?
Это примерчик завалялся прямо в примерчиках к FreePascal: Каталог_куда_Вы_поставили_FreePascal\demo\netware\nutmon.pp
