FileReadInteger

Bu fonksiyon, bayt bazında belirtilen dosya işaretçisine bağlı olarak, dosya işaretçisinin mevcut konumundan int, short veya char tipli değer okur.

int  FileReadInteger(
   int  file_handle,        // Dosya tanıtıcı değeri
   int  size=INT_VALUE      // Bir tamsayının bayt olarak büyüklüğü
   );

Parametreler

file_handle

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

size=INT_VALUE

[in]  Okunması gereken baytların sayısı (en fazla 4). Karşılık gelen sabitler verilmiştir: CHAR_VALUE = 1, SHORT_VALUE = 2 ve INT_VALUE = 4, böylece fonksiyon, char, short veya int tipli bir değerin tamamını okuyabilir.

Dönüş değeri

int tipli bir değer. Bu fonksiyonun sonucu açık bir şekilde hedef tipine, yani okunması gereken verinin tipine dönüştürülmelidir. int tipli bir değere dönüş yapılmışsa, kolaylıkla herhangi bir tamsayı tipine dönüştürülebilir. Dosya işaretçisi, okunan bayt sayısına göre kaydırma yapar.

Not

Okuma 4 bayttan az olduğunda, elde edilen sonuç her zaman pozitiftir. Bir veya iki baytlık bir okuma gerçekleştiriliyorsa, sayının işareti char (1 bayt) veya short (2 bayt) tiplerine yapılacak açık dönüşümle belirlenebilir. Karşılık gelen bir temel tip bulunmuyorsa, üç baytlık bir sayının işaretinin alınması önemsizdir.

Example (burada kullanılan dosya, FileWriteInteger fonksiyonunun örneğinden elde edilmiştir)

//+------------------------------------------------------------------+
//|                                         Demo_FileReadInteger.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  "Trends"
#property indicator_type1   DRAW_SECTION
#property indicator_color1  clrRed
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
//--- verinin okunması için gereken parametreler
input string InpFileName="Trend.bin"// dosya ismi
input string InpDirectoryName="Data"// dizin ismi
//--- global değişkenler
int      ind=0;
int      size=0;
datetime time_buff[];
//--- gösterge tamponları
double   buff[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
   int def_size=100;
//--- dizi için bellek tahsis et
   ArrayResize(time_buff,def_size);
//--- 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));
      //--- ek değişkenler
      int    arr_size;
      uchar  arr[];
      //--- dosyadan veriyi oku
      while(!FileIsEnding(file_handle))
        {
         //--- zamanın yazılması için kaç adet sembol kullanıldığını öğren
         arr_size=FileReadInteger(file_handle,INT_VALUE);
         ArrayResize(arr,arr_size);
         for(int i=0;i<arr_size;i++)
            arr[i]=(char)FileReadInteger(file_handle,CHAR_VALUE);
         //--- zaman değerini kaydet
         time_buff[size]=StringToTime(CharArrayToString(arr));
         size++;
         //--- eğer taşma varsa dizilerin büyüklüklerini artır
         if(size==def_size)
           {
            def_size+=100;
            ArrayResize(time_buff,def_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);
     }
//--- diziyi gösterge tamponlarına 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);
   ArraySetAsSeries(close,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, 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]==time_buff[j])
              {
               //--- fiyatı al
               buff[i]=close[i];
               //--- 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

IntegerToString, StringToInteger, Tamsayı tipleri, FileWriteInteger