FileReadDouble

Bu fonksiyon, ikili bir dosyanın geçerli pozisyonundan bir kayan noktalı çifte-duyarlık sayısını (double) okur.

double  FileReadDouble(
   int  file_handle    // Dosya tanıtıcısı
   );

Parametreler

file_handle

[in] FileOpen() fonksiyonunun dönüş yaptığı dosya tanımlayıcısı.

Dönüş değeri

double tipli değer.

Not

Hata ile ilgili daha detaylı bilgi almak için, GetLastError() fonksiyonunu çağırın.

Örnek (burada kullanılan dosya, FileWriteDouble fonksiyonunun örneğinden elde edilmiştir)

//+------------------------------------------------------------------+
//|                                          Demo_FileReadDouble.mq5 |
//|                        Copyright 2013, MetaQuotes Software Corp. |
//|                                              https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_plots   1
//---- plot Label1
#property indicator_label1  "MA"
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrGreen
#property indicator_style1  STYLE_SOLID
#property indicator_width1  2
#property indicator_separate_window
//--- veri okuma parametreleri
input string InpFileName="MA.csv";    // dosya ismi
input string InpDirectoryName="Data"// dizin ismi
//--- global değişkenler
int      ind=0;
int      size=0;
double   ma_buff[];
datetime time_buff[];
//--- gösterge tamponu
double   buff[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- dosyayı aç
   ResetLastError();
   int file_handle=FileOpen(InpDirectoryName+"//"+InpFileName,FILE_READ|FILE_BIN);
   if(file_handle!=INVALID_HANDLE)
     {
      PrintFormat("%s dosyası, okuma için müsait",InpFileName);
      PrintFormat("Dosya yolu: %s\\Files\\",TerminalInfoString(TERMINAL_DATA_PATH));
      //--- ilk önce, dosyada bulunan veri miktarını oku
      size=(int)FileReadDouble(file_handle);
      //--- diziler için bellek tahsis et
      ArrayResize(ma_buff,size);
      ArrayResize(time_buff,size);
      //--- dosyadan veriyi oku
      for(int i=0;i<size;i++)
        {
         time_buff[i]=(datetime)FileReadDouble(file_handle);
         ma_buff[i]=FileReadDouble(file_handle);
        }
      //--- dosyayı kapat
      FileClose(file_handle);
      PrintFormat("Veri yazıldı, %s dosyası kapatıldı",InpFileName);
     }
   else
     {
      PrintFormat("%s dosyası açılamadı, Hata kodu = %d",InpFileName,GetLastError());
      return(INIT_FAILED);
     }
//--- diziyi, 0 indisli tampona bağla
   SetIndexBuffer(0,buff,INDICATOR_DATA);
//---- çizelgede görüntülenmesi istenmeyen gösterge değerlerini ayarla
   PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   ArraySetAsSeries(time,false);
//--- hala işlenmemiş çubuklar için döngü
   for(int i=prev_calculated;i<rates_total;i++)
     {
      //--- varsayılan olarak 0
      buff[i]=0;
      //--- hala her hangi bir veri var mı kontrol et
      if(ind<size)
        {
         for(int j=ind;j<size;j++)
           {
            //--- eğer tarihler örtüşüyorsa, dosyadaki değer kullanılır
            if(time[i]==time_buff[j])
              {
               buff[i]=ma_buff[j];
               //--- sayacı artır
               ind=j+1;
               break;
              }
           }
        }
     }
//--- bir sonraki çağrı için prev_calculated değerine dönüş yap
   return(rates_total);
  }

Ayrıca Bakınız

Reel tipler (double, float), StringToDouble, DoubleToString, FileWriteDouble