PDA

Просмотр полной версии : как сохранить переменные в файл и загрузить их


poizon
12.05.2008, 22:18
облазил весь хелп фастскрипта , это невозможно сделать я так это понял....весь инет тоже перерыл, в пакетххаке неработает это вроде.

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

п.с если конечно знаете...
спасибо...

alexsl
13.05.2008, 06:48
на вскидку, примерно так:

var
fle: TStringList;
begin
fle:=TStringList.Create;
try
// fle.LoadFromFile('название файла.txt'); // загрузить
..... тут ваши действия
fle.add('строковые данные');
...
или fle.text:='какието данные';
.....
fle.SaveToFile('название файла.txt');
finally
fle.Free;
end;
end;

зы: надеюсь данные будеш читать и писать не при каждой обработке пакета :)
зыы: try/except - не знаю работает ли, по идее скрип должен обрабатывать

QaK
13.05.2008, 08:14
Еще вариант, сделать тпа инишника - читать строчку, потом ее делить на имя поля (все , что до знака "=" например) и значение (все , что после "=").Примерно так =)

poizon
13.05.2008, 11:46
о я разобрался с тем как записать в файл, огромное спасибо, только не знаю как прочесть нужную строку из файла?
синтаксис такой кстати?

try
действия с файлом
finally
в конце работы с файлом
end;

так значит ещё работает if fle.find('123',1) then ShowMessage('s');
если найдено он ставится в тру

s:=fle.indexof('123');
ShowMessage(inttostr(s));
indexof возвращает номер строки в которую записан 123

alexsl
13.05.2008, 12:54
var
MyFile: TStringList;
const
MyFileName = 'c:\myfile.txt';

procedure Init; //Вызывается при включении скрипта
begin
MyFile:=TStringList.Create;
try
MyFile.LoadFromFile(MyFileName);
except// если ошибка, не обращаем внимание
end;

// SetValue('test','hello');
// ShowMessage(GetValue('test'));
end;

procedure Free; //Вызывается при выключении скрипта
begin
if MyFile<>nil then
begin
MyFile.SaveToFile(MyFileName); // сохраняем при завершении работы скрипта.
MyFile.Free; // освобождаем память
end;
end;

// чтение значения из переменной
function GetValue(ValName: string): string;
begin
result:=MyFile.Values[ValName];
end;
// запись переменной
procedure SetValue(ValName: string; Value: string);
begin
MyFile.Values[ValName]:=Value;
end;

//***********************************************

зы:
теперь в где нужно вызывай для чтения: GetValue('ИмяПеременной');
для записи
SetValue('ИмяПеременной','Значение');

работает, проверил =)

зыы: В идеале все критические блоки нужно включать в болки типа try/except, try/finally
try
....
любые операции
....
finally // это блок выполнится при любых обстоятельствах (ошибка, выход из функции и т.д.)
...
здесь освобождаем рессурсы (уничтожаем че выше наплодили)
...
end;//try

poizon
13.05.2008, 14:34
отлично слушай, а ты знаешь как создать файл?из скрипта?я хочу типа запустил скрипт если файла нету то он создаёт и записывает туда настройки все

QaK
13.05.2008, 15:41
кусок кода:
var f:file;
assignfile(f,'babailka.txt');
if not (fileexists('babaika.txt')) then rewrite(f);//если нет файлика - делаем его заново

примерно так

alexsl
13.05.2008, 18:35
в дополнение к QaK, можно так еще:

procedure Init; //Вызывается при включении скрипта
begin
MyFile:=TStringList.Create;
try
// тут бы юзать FileExists() - но увы в ФС его нету ИМХО
// пробуем открыть файл
MyFile.LoadFromFile(MyFileName);
except// если ошибка, скорее всего файла нет
// скорее всего у тебя сохранение настроек отдельной проц.
// тоды
MySaveProcedure;
//
//
// или так
... запись настроек в файл
...
// теперь сохраняем
MyFile.SaveToFile(MyFileName);
end;
end;

NLObP
13.05.2008, 19:15
кусок кода:
var f:file;
assignfile(f,'babailka.txt');
if not (fileexists('babaika.txt')) then rewrite(f);//если нет файлика - делаем его заново

примерно так

В фастскрипте не прокатывает такое. =(

poizon
14.05.2008, 10:03
всё ребят спасибо всем огромное, я думал он не сохранит если указать не существующий файл, раз сохраняет то всё просто )спасибО!

Да, если файл есть, он открывается, иначе создается пустой.

Добавлено через 11 часов 21 минуту
прикол он мне почемуто в файл сохраняет номера процессов(valuename)
а в значение их названия.как это убрать)

alexsl
15.05.2008, 15:40
прикол он мне почемуто в файл сохраняет номера процессов(valuename)
а в значение их названия.как это убрать)

тут поподробнее. не забывай, большенство не телепаты! :D