Группа функций для работы с файлами.
Существует три каталога (с подкаталогами), в которых могут располагаться рабочие файлы:
- /HISTORY/ — специально для функции FileOpenHistory;
- /EXPERTS/FILES — общий случай;
- /TESTER/FILES — специально для тестирования.
Работа с файлами из других каталогов пресекается.
FileClose
void FileClose(int handle)
Закрытие файла, ранее открытого функцией FileOpen().
Параметры:
handle — Файловый описатель, возвращаемый функцией FileOpen().
Пример:
int handle = FileOpen("имя файла", FILE_CSV|FILE_READ);
if(handle>0)
{
// работает с файлом ...
FileClose(handle);
}
FileDelete
void FileDelete(string filename)
Удаление указанного файла. Чтобы получить информацию об ошибке, необходимо вызвать функцию GetLastError().
Файлы могут быть удалены только в том случае, если они расположены в папке каталог_терминала\experts\files (каталог_терминала\tester\files в случае тестирования эксперта) или ее подпапках.
Параметры:
filename — Имя файла.
Пример:
// файл my_table.csv будет удален из папки terminal_dir\experts\files
int lastError;
FileDelete("my_table.csv");
lastError=GetLastError();
if(lastError!=ERR_NOERROR)
{
Print("ошибка (",lastError,") при удалении файла my_table.csv");
return(0);
}
FileFlush
void FileFlush(int handle)
Сброс на диск всех данных, оставшихся в файловом буфере ввода-вывода.
Замечания: функцию FileFlush() необходимо вызывать между операциями чтения из файла и записи в файл.
При закрытии файла данные сбрасываются на диск автоматически, поэтому нет необходимости вызывать функцию FileFlush() перед вызовом функции FileClose().
Параметры:
handle — Файловый описатель, возвращаемый функцией FileOpen().
Пример:
int bars_count = Bars;
int handle = FileOpen("mydat.csv",FILE_CSV|FILE_WRITE);
if(handle>0)
{
FileWrite(handle, "#","OPEN","CLOSE","HIGH","LOW");
for(int i=0;i
FileIsEnding
bool FileIsEnding(int handle)
Возвращает TRUE, если файловый указатель находится в конце файла, иначе возвращает FALSE.
Чтобы получить информацию об ошибке, необходимо вызвать функцию GetLastError(). В случае достижения конца файла в процессе чтения функция GetLastError() вернет ошибку ERR_END_OF_FILE (4099).
Параметры:
handle — Файловый описатель, возвращаемый функцией FileOpen().
Пример:
if(FileIsEnding(h1))
{
FileClose(h1);
return(false);
}
FileIsLineEnding
bool FileIsLineEnding(int handle)
Возвращает TRUE, если файловый указатель находится в конце строки файла формата CSV, иначе возвращает FALSE. Чтобы получить информацию об ошибке, необходимо вызвать функцию GetLastError().
Параметры:
handle — Файловый описатель, возвращаемый функцией FileOpen().
Пример:
if(FileIsLineEnding(h1))
{
FileClose(h1);
return(false);
}
FileOpen
int FileOpen(string filename, int mode, int delimiter=’;’)
Открывает Файл для ввода и/или вывода. Возвращает файловый описатель открытого файла или -1 в случае неудачи. Чтобы получить дополнительную информацию об ошибке, необходимо вызвать функцию GetLastError().
Замечания: файлы могут открываться только в папке каталог_терминала\experts\files (каталог_терминала\tester\files в случае тестирования эксперта) или ее подпапках.
Нельзя одновременно использовать режимы FILE_BIN и FILE_CSV.
Если FILE_WRITE не комбинируется с FILE_READ, то будет открыт файл нулевой длины. Даже если до открытия в файле были данные, то они будут уничтожены. Если необходимо дописывать данные в существующий файл, то его нужно открывать, используя комбинацию FILE_READ | FILE_WRITE.
Если FILE_READ не комбинируется с FILE_WRITE, то файл будет открыт только в том случае, если он уже существует. Если файл не существует, то создать его можно, используя режим FILE_WRITE.
Одновременно может быть открыто не более 32 файлов в пределах одного исполняемого модуля. Описатели файлов, открытых в одном модуле, нельзя передавать в другие модули (библиотеки).
Параметры:
filename — Имя файла.
mode — Способ открытия. Это может быть одна величина или их комбинация: FILE_BIN, FILE_CSV, FILE_READ, FILE_WRITE.
delimiter — Знак разделителя для csv-файлов. По умолчанию применяется символ ‘;’.
Пример:
int handle;
handle = FileOpen("my_data.csv",FILE_CSV|FILE_READ,';');
if(handle
FileOpenHistory
int FileOpenHistory(string filename, int mode, int delimiter=’;’)
Открывает файл в текущей папке истории (каталог_терминала\history\server_name) или ее подпапках. Возвращает описатель файла или -1 в случае неудачи. Для получения дополнительной информации об ошибке необходимо вызвать функцию GetLastError().
Замечания: клиентский терминал может подключаться к серверам разных брокерских компаний. Исторические данные (файлы HST) каждой брокерской компании хранятся в соответствующей подпапке папки истории каталог_терминала\history.
Функция может быть полезна для формирования собственных исторических данных нестандартного символа и/или периода. Файл, сформированный в папке истории может быть открыт автономно, для его графика не требуется подкачка данных.
Параметры:
filename — Имя файла.
mode — Режим открытия. Это может быть одна величина или их комбинация: FILE_BIN, FILE_CSV, FILE_READ, FILE_WRITE.
delimiter — Знак разделителя для csv-файлов. По умолчанию применяется символ ‘;’.
Пример:
int handle=FileOpenHistory("USDX240.HST",FILE_BIN|FILE_WRITE);
if(handle
FileReadArray
int FileReadArray(int handle, void array[], int start, int count)
Функция читает указанное число элементов из двоичного файла в массив. Перед чтением данных массив должен быть достаточного размера. Функция возвращает количество фактически прочитанных элементов.
Для того чтобы получить информацию об ошибке, необходимо вызвать функцию GetLastError().
Параметры:
handle — Файловый описатель, возвращаемый функцией FileOpen().
array[] — Массив, куда данные будут загружены.
start — Стартовая позиция для записи в массив.
count — Количество элементов для чтения.
Пример:
int handle;
double varray[10];
handle = FileOpen("filename.dat", FILE_BIN|FILE_READ);
if(handle>0)
{
FileReadArray(handle, varray, 0, 10);
FileClose(handle);
}
FileReadDouble
double FileReadDouble(int handle, int size=DOUBLE_VALUE)
Функция читает число двойной точности с плавающей точкой (double) из текущей позиции бинарного файла. Размер числа может быть 8 байтов (double) или 4 байта (float).
Чтобы получить информацию об ошибке, необходимо вызвать функцию GetLastError().
Параметры:
handle — Файловый описатель, возвращаемый функцией FileOpen().
size — Формат числа. Может быть DOUBLE_VALUE (8 байтов) или FLOAT_VALUE (4 байта).
Пример:
int handle;
double value;
handle=FileOpen("mydata.dat",FILE_BIN);
if(handle>0)
{
value=FileReadDouble(handle,DOUBLE_VALUE);
FileClose(handle);
}
FileReadInteger
int FileReadInteger(int handle, int size=LONG_VALUE)
Функция читает целое число из текущей позиции бинарного файла. Размер целого числа может быть 1, 2 или 4 байта. Если размер числа не указан, система пытается прочитать как 4-байтовое целое число.
Чтобы получить информацию об ошибке, необходимо вызвать функцию GetLastError().
Параметры:
handle — Файловый описатель, возвращаемый функцией FileOpen().
size — Формата числа. Может быть CHAR_VALUE(1 байт), SHORT_VALUE(2 байта) или LONG_VALUE(4 байта).
Пример:
int handle;
int value;
handle = FileOpen("mydata.dat", FILE_BIN|FILE_READ);
if(handle>0)
{
value=FileReadInteger(h1,2);
FileClose(handle);
}
FileReadNumber
double FileReadNumber(int handle)
Чтение числа с текущей позиции файла CSV до разделителя. Применяется только для файлов CSV.
Для того чтобы получить информацию об ошибке, необходимо вызвать функцию GetLastError().
Параметры:
handle — Файловый описатель, возвращаемый функцией FileOpen().
Пример:
int handle;
int value;
handle = FileOpen("filename.csv", FILE_CSV, '\t');
if(handle>0)
{
value=FileReadNumber(handle);
FileClose(handle);
}
FileReadString
string FileReadString(int handle, int length=0)
Функция читает строку с текущей позиции файла. Применяется как к CSV, так и к двоичным файлам. Для текстовых файлов строка будет прочитана до разделителя. Для бинарных файлов в строку будет прочитано указанное количество символов.
Чтобы получить информацию об ошибке, необходимо вызвать функцию GetLastError().
Параметры:
handle — Файловый описатель, возвращаемый функцией FileOpen().
length — Количество символов для чтения.
Пример:
int handle;
string str;
handle = FileOpen("filename.csv", FILE_CSV|FILE_READ);
if(handle>0)
{
str=FileReadString(handle);
FileClose(handle);
}
FileSeek
bool FileSeek(int handle, int offset, int origin)
Функция перемещает файловый указатель на новую позицию, которая является смещением в байтах от начала, конца или текущей позиции файла. Следующее чтение или запись происходят с новой позиции.
Если перемещение файлового указателя прошло успешно, функция возвращает TRUE, иначе возвращает FALSE. Чтобы получить информацию об ошибке, необходимо вызвать функцию GetLastError().
Параметры:
handle — Файловый описатель, возвращаемый функцией FileOpen().
offset — Смещение в байтах.
origin — Начальное положение. Величина может быть одной из этих констант:
SEEK_CUR — от текущего положения,
SEEK_SET — от начала,
SEEK_END — от конца файла.
Пример:
int handle=FileOpen("filename.csv", FILE_CSV|FILE_READ|FILE_WRITE, ';');
if(handle>0)
{
FileSeek(handle, 0, SEEK_END);
//---- add data to the end of file
FileWrite(handle, data1, data2);
FileClose(handle);
handle=0;
}
FileSize
int FileSize(int handle)
Функция возвращает размер файла в байтах.
Чтобы получить информацию об ошибке, необходимо вызвать функцию GetLastError().
Параметры:
handle — Файловый описатель, возвращаемый функцией FileOpen().
Пример:
int handle;
int size;
handle=FileOpen("my_table.dat", FILE_BIN|FILE_READ);
if(handle>0)
{
size=FileSize(handle);
Print("my_table.dat размер ", size, " bytes");
FileClose(handle);
}
FileTell
int FileTell(int handle)
Функция возвращает смещение текущей позицию файлового указателя от начала файла.
Чтобы получить информацию об ошибке, необходимо вызвать функцию GetLastError().
Параметры:
handle — Файловый описатель, возвращаемый функцией FileOpen().
Пример:
int handle;
int pos;
handle=FileOpen("my_table.dat", FILE_BIN|FILE_READ);
// чтение некоторых данных
pos=FileTell(handle);
Print("current position is ", pos);
FileWrite
int FileWrite(int handle, …)
Функция предназначена для записи данных в файл CSV, разделитель между данными включается автоматически. После записи в файл добавляется признак конца строки «\r\n». При выводе числовые данные преобразуются в текстовый формат (см. функцию Print()).
Возвращает количество записанных символов или отрицательное значение, если происходит ошибка .
Чтобы получить информацию об ошибке, необходимо вызвать функцию GetLastError().
Параметры:
handle — Файловый описатель, возвращаемый функцией FileOpen().
… — Данные, разделенные запятыми. Может быть не больше 63 параметров.
Данные типов double, int автоматически преобразовываются в строку, данные типов color, datetime и bool воспринимаются как целыечисла (тип int), данные типа string выводятся как есть, без преобразования.
В качестве параметра нельзя передать массивы, массивы могут быть выведены поэлементно.
Пример:
int handle;
datetime orderOpen=OrderOpenTime();
handle=FileOpen("filename", FILE_CSV|FILE_WRITE, '\t');
if(handle>0)
{
FileWrite(handle, Close[0], Open[0], High[0], Low[0], TimeToStr(orderOpen));
FileClose(handle);
}
FileWriteArray
int FileWriteArray(int handle, object array[], int start, int count)
Функция записывает массив в бинарный файл. Массивы типа int, bool, datetime и color записываются поэлементно как 4-байтовые целые числа. Массивы типа double записываются поэлементно как 8-байтовые числа c плавающей запятой. Массивы типа string записываются построчно, после каждой строки автоматически добавляется признак конца строки «\r\n».
Возвращает число записанных элементов или отрицательное значение в случае ошибки.
Чтобы получить информацию об ошибке, необходимо вызвать функцию GetLastError().
Параметры:
handle — Файловый описатель, возвращаемый функцией FileOpen().
array[] — Массив для записи.
start — Начальный индекс в массиве (номер первого записываемого элемента).
count — Количество записываемых элементов.
Пример:
int handle;
double BarOpenValues[10];
// скопирует первые десять баров в массив
for(int i=0;i0)
{
FileWriteArray(handle, BarOpenValues, 3, 7); // запись последних 7 элементов
FileClose(handle);
}
FileWriteDouble
int FileWriteDouble(int handle, double value, int size=DOUBLE_VALUE)
Функция записывает число с плавающей запятой в двоичный файл. Если формат задан FLOAT_VALUE, то значение будет записано как 4-байтовое число с плавающей запятой (тип float), иначе будет записан в 8-байтовом формате с плавающей запятой (тип double).
Возвращает фактически записанное число байт или отрицательное значение в случае ошибки.
Для того чтобы получить информацию об ошибке, необходимо вызвать функцию GetLastError().
Параметры:
handle — Файловый описатель, возвращаемый функцией FileOpen().
value — Значение двойной точности.
size — Дополнительный флаг формата. Может быть любой из следующих величин:
DOUBLE_VALUE (8 байтов, по умолчанию)
FLOAT_VALUE (4 байта).
Пример:
int handle;
double var1=0.345;
handle = FileOpen("mydata.dat", FILE_BIN|FILE_WRITE);
if(handle
FileWriteInteger
int FileWriteInteger(int handle, int value, int size=LONG_VALUE)
Функция записывает значение целого числа в двоичный файл. Если размер — SHORT_VALUE, значение будет записано как 2-байтовое целое число (тип short), если размер — CHAR_VALUE, значение будет записано как 1-байтовое целое число (тип char), если размер — LONG_VALUE, значение будет записано как 4-байтовое целое число (тип long int).
Возвращает число фактически записанных байтов или отрицательное значение в случае ошибки.
Чтобы получить информацию об ошибке, необходимо вызвать функцию GetLastError().
Параметры:
handle — Файловый описатель, возвращаемый функцией FileOpen().
value — Значение для записи.
size — Дополнительный флаг формата. Может быть любой из следующих величин:
CHAR_VALUE (1 байт),
SHORT_VALUE (2 байта),
LONG_VALUE (4 байта, по умолчанию).
Пример:
int handle;
int value=10;
handle = FileOpen("filename.dat", FILE_BIN|FILE_WRITE);
if(handle
FileWriteString
int FileWriteString(int handle, string value, int size)
Функция записывает строку в двоичный файл с текущей позиции.
Возвращает число фактически записанных байтов или отрицательное значение в случае ошибки.
Чтобы получить информацию об ошибке, необходимо вызвать функцию GetLastError().
Параметры:
handle — Файловый описатель, возвращаемый функцией FileOpen().
value — Записываемая строка.
size — Длина записываемой строки. Если строка длиннее, чем указанное значение, то она будет усечена. Если строка короче, то она будет добавлена двоичными 0 до указанной длины.
Пример:
int handle;
string str="some string";
handle=FileOpen("filename.bin", FILE_BIN|FILE_WRITE);
if(handle