FileReadStruct

İkili dosya içeriğini, mevcut konumdan başlayarak parametre olarak geçirilen bir yapıya okur.

uint  FileReadStruct(
   int          file_handle,        // dosya tanıtıcısı
   const void&  struct_object,      // içeriğin okunacağı hedef yapı
   int          size=-1             // bayt olarak yapı boyutu
   );

Parametreler

file_handle

[in] Açık bir bin dosyasının tanıtıcısı.

struct_object

[out]  Söz konusu yapının nesnesi. Bu yapı, dizgiler, dinamik diziler veya sanal fonksiyonlar içermemelidir.

size=-1

[in]  Okunacak bayt sayısı. Boyut belirtilmemişse veya belirtilen değer yapının boyutunu aşıyorsa, söz konusu yapının boyutu kullanılır.

Dönüş değeri

Başarılı sonuç durumunda, okunan bayt sayısına dönüş yapılır ve dosya işaretçisi, eşit sayıda bayt ile kaydırılır.

Örnek (Burada kullanılan dosya FileWriteStruct fonksiyonunun örneğinden elde edilmiştir)

//+------------------------------------------------------------------+
//|                                          Demo_FileReadStruct.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_separate_window
#property indicator_buffers 4
#property indicator_plots   1
//---- plot Label1
#property indicator_label1  "Candles"
#property indicator_type1   DRAW_CANDLES
#property indicator_color1  clrOrange
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
#property indicator_separate_window
//--- verileri almak için parametreler
input string  InpFileName="EURUSD.txt"// dosya ismi
input string  InpDirectoryName="Data";  // dizin ismi
//+------------------------------------------------------------------+
//| Mum verilerini depolamak için bir yapı                           |
//+------------------------------------------------------------------+
struct candlesticks
  {
   double            open;  // açılış fiyatı
   double            close; // kapanış fiyatı
   double            high;  // yüksek fiyat
   double            low;   // düşük fiyat
   datetime          date;  // tarih
  };
//--- gösterge tamponları
double       open_buff[];
double       close_buff[];
double       high_buff[];
double       low_buff[];
//--- global değişkenler
candlesticks cand_buff[];
int          size=0;
int          ind=0;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
   int default_size=100;
   ArrayResize(cand_buff,default_size);
//--- dosyayı aç
   ResetLastError();
   int file_handle=FileOpen(InpDirectoryName+"//"+InpFileName,FILE_READ|FILE_BIN|FILE_COMMON);
   if(file_handle!=INVALID_HANDLE)
     {
      PrintFormat("%s dosyası, okuma için müsait",InpFileName);
      PrintFormat("Dosya adresi: %s\\Files\\",TerminalInfoString(TERMINAL_COMMONDATA_PATH));
      //--- dosyadan veriyi oku
      while(!FileIsEnding(file_handle))
        {
         //--- veriyi diziye yaz
         FileReadStruct(file_handle,cand_buff[size]);
         size++;
         //--- dizi taşmış mı kontrol et
         if(size==default_size)
           {
            //--- dizinin boyutlarını artır
            default_size+=100;
            ArrayResize(cand_buff,default_size);
           }
        }
      //--- dosyayı kapat
      FileClose(file_handle);
      PrintFormat("Veriler okundu, %s dosyası kapatıldı",InpFileName);
     }
   else
     {
      PrintFormat("%s dosyası açılamadı, Hata kodu = %d",InpFileName,GetLastError());
      return(INIT_FAILED);
     }
//--- gösterge tamponlarının eşlenmesi
   SetIndexBuffer(0,open_buff,INDICATOR_DATA);
   SetIndexBuffer(1,high_buff,INDICATOR_DATA);
   SetIndexBuffer(2,low_buff,INDICATOR_DATA);
   SetIndexBuffer(3,close_buff,INDICATOR_DATA);
//--- boş değer
   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ş olan mumlar için bir döngü
   for(int i=prev_calculated;i<rates_total;i++)
     {
      //--- varsayılan olarak 0
      open_buff[i]=0;
      close_buff[i]=0;
      high_buff[i]=0;
      low_buff[i]=0;
      //--- hala, herhangi bir veri mevcut mu kontrol et
      if(ind<size)
        {
         for(int j=ind;j<size;j++)
           {
            //--- tarihler örtüşüyorsa dosyadaki değeri kullan
            if(time[i]==cand_buff[j].date)
              {
               open_buff[i]=cand_buff[j].open;
               close_buff[i]=cand_buff[j].close;
               high_buff[i]=cand_buff[j].high;
               low_buff[i]=cand_buff[j].low;
               //--- 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

Yapılar ve sınıflar, FileWriteStruct