Файл calc.txt в корне Блэкбокса
Код:
Тут какой то текст:
#3.141592653589793
#3.141592653589793
тут будет результат сложения двух действительных чисел:
#
конец файла
Пример работы с файлом, применяя только модули Files и Strings.
Код:
MODULE ObxFilesDemo;
IMPORT Files, Strings;
PROCEDURE OpenReadModifyAndSaveBack* (path, name: ARRAY OF CHAR);
VAR
file, newFile: Files.File; r: Files.Reader; w: Files.Writer;
b: BYTE; str: ARRAY 64 OF CHAR; pos, res: INTEGER;
r1, r2, r3: REAL;
BEGIN
file := Files.dir.Old(Files.dir.This(path), name$, Files.shared);
ASSERT(file # NIL, 21);
r := file.NewReader(NIL);
r.ReadByte(b);
WHILE (~r.eof) & (b # ORD("#")) DO
r.ReadByte(b);
END;
ASSERT(~r.eof, 22);
r.ReadByte(b);
pos := 0;
WHILE (~r.eof) & ((b = ORD(".")) OR (b >= ORD("0")) & (b <= ORD("9"))) DO
str[pos] := CHR(b);
INC(pos);
r.ReadByte(b);
END;
ASSERT(~r.eof, 23);
str[pos] := 0X;
Strings.StringToReal(str, r1, res);
ASSERT(res = 0, 24);
r.ReadByte(b);
WHILE (~r.eof) & (b # ORD("#")) DO
r.ReadByte(b);
END;
ASSERT(~r.eof, 25);
r.ReadByte(b);
pos := 0;
WHILE (~r.eof) & ((b = ORD(".")) OR (b >= ORD("0")) & (b <= ORD("9"))) DO
str[pos] := CHR(b);
INC(pos);
r.ReadByte(b);
END;
ASSERT(~r.eof, 26);
str[pos] := 0X;
Strings.StringToReal(str, r2, res);
ASSERT(res = 0, 27);
r3 := r1 + r2;
Strings.RealToString(r3, str);
r.ReadByte(b);
WHILE (~r.eof) & (b # ORD("#")) DO
r.ReadByte(b);
END;
ASSERT(~r.eof, 28);
newFile := Files.dir.New(Files.dir.This(path), Files.dontAsk);
res := r.Pos();
r.SetPos(0);
w := newFile.NewWriter(NIL);
FOR pos := 0 TO res - 1 DO
r.ReadByte(b);
w.WriteByte(b);
END;
FOR pos := 0 TO LEN(str$) - 1 DO
w.WriteByte(SHORT(SHORT(ORD(str[pos]))))
END;
r.ReadByte(b);
WHILE (~r.eof) DO
w.WriteByte(b);
r.ReadByte(b);
END;
newFile.Register(name$, "", Files.dontAsk, res);
ASSERT(res = 0, 29);
file.Close;
newFile.Close;
END OpenReadModifyAndSaveBack;
END ObxFilesDemo.
"ObxFilesDemo.OpenReadModifyAndSaveBack('', 'calc.txt')"