- Bossafx.pl
- Edukacja
- Automatyzacja handlu MQL4
- Funkcje MQL4
- Funkcje operacji plikowych
FileClose
Funkcja zamyka plik otwarty uprzednio funkcją FileOpen().
Składnia:
void FileClose( int handle )
Parametry
handle – uchwyt pliku zwracany przez funkcję FileOpen()
Wartość zwracana
brak
Przykład:
int handle = FileOpen("nazwa_pliku", FILE_CSV|FILE_READ);
if( handle > 0 )
{
// jakieś operacje na plikach ...
FileClose(handle);
}
FileDelete
Funkcja usuwa plik o podanej nazwie, jako parametr wywołania funkcji. Aby uzyskać szczegółowe informacje o błędzie, korzystamy z funkcji GetLastError().
Pliki mogą być tylko usunięte ze standardowych katalogów widocznych przez terminal MT4: terminal_dir\experts\file, terminal_directory\tester\file oraz z podkatalogów.
Składnia:
void FileDelete( string nazwa_pliku )
Parametry
nazwa_pliku – nazwa pliku lub ścieżka i nazwa pliku
Wartość zwracana
brak
Przykład:
// usunięcie pliku moje_dane.csv z podkatalogu terminal_dir\experts\files
int lastError;
FileDelete("moje_dane.csv");
lastError=GetLastError();
if(laseError!=ERR_NOERROR)
{
Print("Błąd usunięcia (",lastError,") pliku moje_dane.csv");
return(0);
}
FileFlush
Funkcja czyści, opróżnia bufor przechowujący dane do pliku. Podczas operacji plikowych zapis danych jest buforowany w celu przyspieszenia wykonywania się programu i nie blokowania obliczeń programu przez zapis/odczyt danych plikowych, który jest znacznie wolniejszy, niż obliczenia procesora, operacje w pamięci operacyjnej.
Uwagi! Funkcja FileFlush() ma rację bytu, kiedy wywoływana jest podczas operacji odczytu/zapisu pliku. Nie ma konieczności wywoływania FileFlush przed zamknięciem pliku, ponieważ przy zamknięciu pliku FileCLose(), dane z bufora są automatycznie opróżniane.
Składnia:
void FileFlush( int handle )
Parametry
handle – uchwyt pliku zwracany przez funkcję FileOpen()
Wartość zwracana
brak
Przykład:
int bars_count = Bars;
int handle = FileOpen("moje_dane.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
Funkcja zwraca wartość logiczną true (prawda) jeśli wskaźnik pozycji pliku ustawiony jest na końcu pliku, w przeciwnym razie zwraca false (fałsz). Typowe zastosowanie funkcji to odczyt pliku w pętli i sprawdzanie czy osiągnięto koniec pliku wówczas koniec odczytu pliku. Aby uzyskać szczegółowe informacje o błędzie, korzystamy z funkcji GetLastError().
Składnia:
bool FileIsEnding( int handle )
Parametry
handle – uchwyt pliku zwracany przez funkcję FileOpen()
Wartość zwracana
true – jeśli koniec pliku
false – jeśli wskaźnik pozycji nie jest na końcu pliku
Przykład:
while(FileIsEnding(handle1))
{
int n = FileReadNumber(handle1);
Print("Odczytana liczba =",n);
}
FileIsLineEnding
Funkcja zwraca wartość true jeśli w pliku tekstowym wskaźnik pozycji w pliku osiągnął koniec linii w przeciwnym razie wskazuje false. Typowe zastosowanie to odczyt plików tekstowych o zmiennej długości danych w pojedynczej linii. Aby uzyskać szczegółowe informacje o błędzie, korzystamy z funkcji GetLastError()
Składnia:
bool FileIsLineEnding( int handle )
Parametry
handle – uchwyt pliku zwracany przez funkcję FileOpen()
Wartość zwracana
true – jeśli wskaźnik jest na końcu linii
false – jeśli wskaźnik nie osiągnął końca linii
Przykład:
if(FileIsLineEnding(handle1))
{
FileClose(handle1);
return(false);
}
FileOpen
Jest to jedna z najważniejszych funkcji plikowych otwierająca plik i zwracająca identyfikator, tak zwany uchwyt pliku wykorzystywany przez pozostałe funkcje np. odczytu czy zapisu danych do pliku. Aby uzyskać szczegółowe informacje o błędzie, korzystamy z funkcji GetLastError().
Uwaga! Pliki mogą być otwierane tylko ze standardowych katalogów widocznych przez terminal MT4: terminal_dir\experts\file, terminal_directory\tester\file oraz z podkatalogów.
Parametry otwarcia pliku mogą być łączone (|). Wyjątkiem jest tryb formatu pliku, którego nie można stosować jednocześnie FILE_BIN i FILE_CSV. Jeśli zastosujemy jednocześnie tryb FILE_WRITE oraz FILE_READ to otwarty zostanie plik wyzerowany, pusty w trybie do zapisu i odczytu, a jeśli wcześniej w pliku były dane to zostaną one usunięte. Z trybu FILE_READ, korzystamy gdy chcemy otworzyć istniejący plik tylko do odczytu, a z FILE_WRITE gdy chcemy utworzyć nowy plik.
Możemy otworzyć jednocześnie maksymalnie 32 pliki w ramach jednego programu, modułu EA, wskaźnika, skryptu, biblioteki i nie możemy przekazywać uchwytu pliku po między modułami.
Składnia:
int FileOpen( string nazwa_pliku, int mode, int delimiter=';')
Parametry
nazwa_pliku – nazwa pliku do otwarcia
mode – tryb otwarcia pliku może mieć poniższe wartości, łączone:
- FILE_BIN – otwiera plik w trybie binarnym
- FILE_CSV – otwiera plik w trybie tekstowym
- FILE_READ – otwiera plik do odczytu
- FILE_WRITE – otwiera plik do zapisu
delimiter – separator dla plików tekstowych typu csv. Domyślna wartość
jeśli nie podamy podczas wywołania to średnik (;)
Wartość zwracana
identyfikator, uchwyt pliku
Przykład:
int handle;
handle = FileOpen("moje_dane.csv",FILE_CSV|FILE_READ,';');
if(handle<1)
{
Print("Nie można otworzyć pliku moje_dane.dat, błąd otwarcia pliku =",
GetLastError());
return(false);
}
FileOpenHistory
Funkcja działa podobnie jak FIleOpen, ale otwiera tylko pliki z danymi historycznymi, które znajdują się w podkatalogu terminal MT4 terminal_directory\histiry\<nazwa_serwera_brokera> lub jego podkatalogach. Jeśli funkcja się powiedzie zwraca uchwyt pliku, a jeśli nie to zwraca wartość -1,. Aby uzyskać szczegółowe informacje o błędzie, korzystamy z funkcji GetLastError().
Uwaga! Terminal klienta MT4, może korzystać (można się logować do różnych serwerów, brokerów), dlatego aktualne dane (format HST) w zależności od zalogowanego klienta mogą znajdować się w różnych podkatalogach, co należy uwzględnić w naszych programach. Funkcja może być przydatna do tworzenia własnych danych historii np. danych typu 3 minutowe słupki lub konwersji do innych formatów. Plik utworzony w folderze historii mogą być otwierane w trybie offline tzn. nie są aktualizowane na bieżąco i w danym momencie nie muszą być identyczne z danymi na wykresie.
Składnia:
int FileOpenHistory( string nazwa_pliku, int mode, int delimiter=';')
Parametry
nazwa_pliku – nazwa pliku danych historycznych w formacie hst
mode – tryb otwarcia pliku może mieć poniższe parametry łączone:
FILE_BIN – tryb binarny, zalecany
FILE_CSV – tryb tekstowy, raczej nie stosowany
FILE_READ – tryb do odczytu
FILE_WRITE – tryb do zapisu
delimiter – separator dla pliku tekstowego
Wartość zwracana
uchwyt pliku
Przykład:
int handle = FileOpenHistory("USDX3.HST",FILE_BIN|FILE_WRITE);
if(handle<1)
{
Print("Nie mogę utworzyć pliku USDX3.HST");
return(false);
}
// operacje na pliku
// ...
FileClose(handle);
FileReadArray
Funkcja odczytuje określoną ilość elementów tablicy z pliku binarnego. Należy dokładnie zweryfikować ilość odczytywanych danych z pliku, tak aby nie była większa niż wielkość tablicy. Aby uzyskać szczegółowe informacje o błędzie, korzystamy z funkcji GetLastError().
Składnia:
int FileReadArray( int handle, object&array[], int start, int count )
Parametry
handle – uchwyt pliku zwracany przez funkcję FileOpen()
array[] – tablica w której zostaną umieszczone odczytane dane
start – pozycja w pliku od której będą odczytywane dane
count – ilość elementów, która ma być odczytana
Wartość zwracana
ilość odczytanych elementów
Przykład:
int handle;
double varray[10];
handle=FileOpen("plik_danych.dat", FILE_BIN|FILE_READ);
if(handle>0)
{
FileReadArray(handle, varray, 0, 10);
FileClose(handle);
}
FileReadDouble
Funkcja odczytuje dane z pliku w formacie zmiennoprzecinkowym double zaczynając od aktualnej pozycji w pliku. Format danych zmiennoprzecinkowych może być 8 bajtowy lub 4 bajtowy, co określamy jako parametr wywołania funkcji. Aby uzyskać informacje o błędach, korzystamy z funkcji GetLastError().
Składnia:
double FileReadDouble( int handle, int size=DOUBLE_VALUE )
Parametry
handle – uchwyt pliku zwracany przez funkcję FileOpen()
size – parametr określający wielkość odczytywanych danych
zmiennoprzecinkowych i może przyjmować wartość:
- DOUBLE_VALUE – 8 bajtów
- FLOAT_VALUE - 4 bajty
Wartość zwracana
odczytana wartość
Przykład:
int handle;
double value;
handle = FileOpen("moje_dane.dat",FILE_BIN);
if(handle>0)
{
value=FileReadDouble(handle,DOUBLE_VALUE);
FileClose(handle);
}
FileReadInteger
Funkcja odczytuje liczbę całkowitą zaczynając od aktualnej pozycji pliku binarnego. Format liczby całkowitej może być długości 1, 2 lub 4 bajty. Jeśli format nie został określony, zostanie przyjęta wartość domyślna 4 bajty. Aby uzyskać szczegółowe informacje o błędach, korzystamy z funkcji GetLastError().
Składnia:
int FileReadInteger( int handle, int size=LONG_VALUE )
Parametry
handle – uchwyt pliku zwracany przez funkcję FileOpen()
size – format określający długość może przyjmować poniższe wartości:
- CHAR_VALUE - 1 bajt
- SHORT_VALUE - 2 bajty
- LONG_VALUE - 4 bajty
Wartość zwracana
odczytana wartość typu integer
Przykłady:
int handle;
int value;
handle=FileOpen("moje_dane.dat", FILE_BIN|FILE_READ);
if(handle>0)
{
value=FileReadInteger(handle,2);
FileClose(handle);
}
FileReadNumber
Funkcja odczytuje wartość numeryczną z pliku tekstowego i może być stosowana tylko dla pliku typu tekstowego CSV. Aby uzyskać szczegółowe informacje o błędach, korzystamy z funkcji GetLastError().
Składnia:
double FileReadNumber( int handle )
Parametry
handle – uchwyt pliku zwracany przez funkcję FileOpen()
Wartość zwracana
odczytana wartość numeryczna
Przykład:
int handle;
int value;
handle=FileOpen("moje_dane_tekstowe.csv", FILE_CSV, ';');
if(handle>0)
{
value=FileReadNumber(handle);
FileClose(handle);
}
FileReadString
Funkcja odczytuje ciąg znaków (string) zaczynając od aktualnej pozycji w pliku. Dotyczy to zarówno plików binarnych i tekstowych CSV. Dla plików tekstowych, ciąg znaków zostanie odczytany bez ogranicznika (;). W przypadku pliku binarnego odczytane zostaną wszystkie dane określone długością length. Aby uzyskać szczegółowe informacje o błędach, korzystamy z funkcji GetLastError().
Składnia:
string FileReadString( int handle, int length=0 )
Parametry
handle – uchwyt pliku zwracany przez funkcję FileOpen()
length – długość ciągu danych tekstowych do odczytu
Wartość zwracana
o0dczytany string
Przykład:
int handle;
string str;
handle=FileOpen("moj_plik.csv", FILE_CSV|FILE_READ);
if(handle>0)
{
str=FileReadString(handle);
FileClose(handle);
FileSeek
Funkcja ustawia pozycję wskaźnik pliku na nową określoną parametrem, licząc w bajtach od początku/końca/aktualnej pozycji w pliku. Jeśli przesunięcie wskaźnika w pliku zakończyło się pozytywnie zwracaną wartością jest true, w przeciwnym wypadku zwraca false. Aby uzyskać szczegółowe informacje o błędach, korzystamy z funkcji GetLastError().
Składnia:
bool FileSeek( int handle, int offset, int origin )
Parametry
handle – uchwyt pliku zwracany przez funkcję FileOpen()
offset – przesunięcie w bajtach
origin – pozycja, od której liczone będzie przesunięcie:
- SEEK_CUR – od aktualnej pozycji wskaźnika
- SEEK_SET – od początku pliku
- SEEK_END – od końca pliku
Wartość zwracana
true – jeśli prawidłowo przesunięto kursor
false – jeśli błąd przesunięcia kursora
Przykład:
int handle=FileOpen("moj_plik.csv", FILE_CSV|FILE_READ|FILE_WRITE, ';');
if(handle>0)
{
FileSeek(handle, 0, SEEK_END);
//---- dopisanie wartości na koniec pliku
FileWrite(handle, dane1, dane2);
FileClose(handle);
handle=0;
}
FileSize
Funkcja zwraca rozmiar pliku w bajtach. Aby uzyskać szczegółowe informacje o błędach, korzystamy z funkcji GetLastError().
Składnia:
int FileSize( int handle )
Parametry
handle – uchwyt pliku zwracany przez funkcję FileOpen()
Wartość zwracana
wielkość pliku w bajtach
Przykład:
int handle;
int size;
handle=FileOpen("moje_dane.dat", FILE_BIN|FILE_READ);
if(handle>0)
{
size=FileSize(handle);
Print( "Plik moje_dane.dat jest wielkości =", size, " bajtów");
FileClose(handle);
}
FileTell
Funkcja zwraca aktualną pozycję wskaźnika w pliku. Aby uzyskać szczegółowe informacje o błędach, korzystamy z funkcji GetLastError().
Składnia:
int FileTell( int handle )
Parametry
handle – uchwyt pliku zwracany przez funkcję FileOpen()
Wartość zwracana
aktualna pozycja wskaźnika w pliku
Przykłady:
int handle;
int pos;
handle=FileOpen("moje_dane.dat", FILE_BIN|FILE_READ);
// odczytujemy aktualną pozycję wskaźnika
pos=FileTell(handle);
Print("Aktualna pozycja =", pos);
FileWrite
Funkcja jest przeznaczona do zapisu danych tekstowych do pliku typu CSV, ograniczniki są dopisywane automatycznie. Po zapisie, pojedynczym wywołaniu funkcji FileWrite na końcu dodawana jest wartść znaku końca linii (\ r\n). Aby uzyskać szczegółowe informacje o błędach, trzeba wywołać GetLastError (). Kolejne dane, które mają być zapisane w pliku oddzielamy przecinkami, parametrów może być maksymalnie 63. Dane typu int i double zostaną automatycznie skonwertowane do typu string, dane typu color, datetime i bool nie zostaną skonwertowane i zostaną zapisane w formacie integer. Tablice nie mogą być przekazywane, jako parametr i zapisane w pliku.
Składnia:
int FileWrite( int handle, ...)
Parametry
handle – uchwyt pliku zwracany przez funkcję FileOpen()
... – dane które mają być zapisane do pliku oddzielone przecinkami,
maksymalnie do 63 parametrów
Wartość zwracana
ilość zapisanych znaków do pliku lub -1 jeśli błąd zapisu
Przykład:
int handle;
datetime dataOtwarciaPozycji = OrderOpenTime();
handle=FileOpen("plik_tekstowy.csv", FILE_CSV|FILE_WRITE, ';');
if(handle>0)
{
FileWrite(handle, Close[0], Open[0], High[0], Low[0],
TimeToStr(dataOtwarciaPozycji));
FileClose(handle);
}
FileWriteArray
Funkcja zapisuje tablicę do pliku binarnego. Tablice typu integer, datetime, color będą zapisane jako wartości 4-bajtowe, a tablice typu double jako wartości 8-bajtowe. Tablica typu string zostanie zapisana z separatorami, a na końcu dodany zostanie znak końca linii (\r\n). Aby uzyskać szczegółowe informacje o błędach, korzystamy z funkcji GetLastError().
Składnia:
int FileWriteArray( int handle, object array[], int start, int count )
Parametry
handle – uchwyt pliku zwracany przez funkcję FileOpen()
array[] – tablica która zostanie zapisana
start – pierwszy element tablicy, który ma zostać zapisany
count – ilość elementów do zapisania z tablicy
Wartość zwracana
ilość zapisanych elementów tablicy lub -1 jeśli błąd zapisu
Przykład:
int handle;
double BarOpenValues[10];
// kopiuje 10 elementów z tablicy
for(int i=0;i<10; i++)
BarOpenValues[i]=Open[i];
// otwiera plik do zapisu binarnego, tablicy
handle=FileOpen("moje_dane.dat", FILE_BIN|FILE_WRITE);
if(handle>0)
{
// zapisuje 7 elementów z tablicy zaczynając od trzeciego
FileWriteArray(handle, BarOpenValues, 3, 7);
FileClose(handle);
}
FileWriteDouble
Funkcja zapisuje wartości typu zmiennoprzecinkowego, double do pliku binarnego. Domyślny format double to 8 bajtów DOUBLE_VALUE lub podajemy FLOAT_VALUE wówczas zapisana wartość będzie 4 bajtowa. Aby uzyskać szczegółowe informacje o błędach, korzystamy z funkcji GetLastError().
Składnia:
int FileWriteDouble( int handle, double value, int size=DOUBLE_VALUE )
Parametry
handle – uchwyt pliku zwracany przez funkcję FileOpen().
value – wartość, która ma zostać zapisana w pliku
size – opcjonalnie podajemy format double:
- DOUBLE_VALUE - 8 bajtów, domyślna wartość
- FLOAT_VALUE – 4 bajty
Wartość zwracana
ilość zapisanych bajtów lub -1 jeśli błąd
Przykład:
int handle;
double var1=0.345;
handle=FileOpen("moje_dane.dat", FILE_BIN|FILE_WRITE);
if(handle<1)
{
Print("Nie mogę zapisać danych =",GetLastError());
return(0);
}
FileWriteDouble(handle, var1, DOUBLE_VALUE);
//...
FileClose(handle)
FileWriteInteger
Funkcja zapisuje wartość całkowitą, integer do pliku binarnego. Domyślna wielkość zapisywanych danych to LONG_VALUE 4 bajty, lub podać typ SHORT_VALUE to 2 bajty, albo CHAR_VALUE to 1 bajt. Aby uzyskać szczegółowe informacje o błędach, korzystamy z funkcji GetLastError().
Składnia:
int FileWriteInteger( int handle, int value, int size=LONG_VALUE )
Parametry
handle – uchwyt pliku zwracany przez funkcję FileOpen()
value – wartość która będzie zapisana do pliku
size – opcjonalna wartość format danych:
CHAR_VALUE - 1 bajt
SHORT_VALUE - 2 bajty
LONG_VALUE - 4 bajty, domyślnie
Wartość zwracana
liczba zapisanych bajtów, lub -1 jeśli błąd
Przykład:
int handle;
int value=10;
handle=FileOpen("moje_dane.dat", FILE_BIN|FILE_WRITE);
if(handle<1)
{
Print("Nie mogę zapisać do pliku, błąd =",GetLastError());
return(0);
}
FileWriteInteger(handle, value, SHORT_VALUE);
//...
FileClose(handle)
FileWriteString
Funkcja zapisuje wartość typu string (ciąg znaków) do pliku binarnego zaczynając od aktualnej pozycji w pliku. Aby uzyskać szczegółowe informacje o błędach, korzystamy z funkcji GetLastError().
Składnia:
int FileWriteString( int handle, string value, int length )
Parametry
handle – uchwyt pliku zwracany przez funkcję FileOpen()
value – ciąg znaków który zostanie zapisany w pliku
length – długość ciągu która ma zostać zapisana
Wartość zwracana
ilość zapisanych znaków lub -1 jeśli błąd
Przykład:
int handle;
string str="ciąg znaków do zapisu w pliku";
handle=FileOpen("moj_plik.bin", FILE_BIN|FILE_WRITE);
if(handle<1)
{
Print("Nie mogę zapisać do pliku, błąd =",GetLastError());
return(0);
}
FileWriteString(handle, str, 29);
FileClose(handle);
Niniejszy materiał, przygotowany przez DM BOŚ S.A. ma charakter wyłącznie informacyjny, prezentowany jest w celach edukacyjnych i nie stanowi porady prawnej oraz nie jest rekomendacją osobistą w ramach świadczenia usługi doradztwa inwestycyjnego zgodnie z przepisami prawa. DM BOŚ S.A. nie udziela gwarancji dokładności, aktualności, oraz kompletności niniejszych informacji. Zaleca się przeprowadzenie we własnym zakresie niezależnego przeglądu informacji z niniejszego materiału.