Группа функций для работы с файлами.
Существует три каталога (с подкаталогами), в которых могут располагаться рабочие файлы:
- /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<bars_count;i++) FileWrite(handle, i+1,Open[i],Close[i],High[i], Low[i]); FileFlush(handle); ... for(int i=0;i<bars_count;i++) FileWrite(handle, i+1,Open[i],Close[i],High[i], Low[i]); FileClose(handle); }
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<1) { Print("Файл my_data.dat не обнаружен, последняя ошибка ", GetLastError()); return(false); }
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<1) { Print("Не может создать файл USDX240.HST"); return(false); } // работа с файлом // ... FileClose(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;i<10; i++) BarOpenValues[i]=Open[i]; // запись массива в файл handle=FileOpen("mydata.dat", FILE_BIN|FILE_WRITE); if(handle>0) { 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<1) { Print("can't open file error-",GetLastError()); return(0); } FileWriteDouble(h1, var1, DOUBLE_VALUE); //... FileClose(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<1) { Print("can't open file error-",GetLastError()); return(0); } FileWriteInteger(handle, value, SHORT_VALUE); //... FileClose(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<1) { Print("can't open file error-",GetLastError()); return(0); } FileWriteString(handle, str, 8); FileClose(handle);