FileTell

Fonksiyon, açık bir dosyanın işaretçisinin mevcut konumuna dönüş yapar.

ulong  FileTell(
   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

Dosya işaretçisinin konumu - dosya başlangıcından itibaren, bayt bazında.

Not

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

Örnek:

//+------------------------------------------------------------------+
//|                                                Demo_FileTell.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"
//--- script çalıştırıldığında giriş parametrelerinin penceresini göster
#property script_show_inputs
//--- giriş parametreleri
input string InpFileName="file.txt";    // dosya ismi
input string InpDirectoryName="Data";   // dizin ismi
input int    InpEncodingType=FILE_ANSI// ANSI=32 veya UNICODE=64
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- rassal sayıları oluşturmak için değişken değerini belirle
   _RandomSeed=GetTickCount();
//--- dizgilerin başlangıç noktası konumları için değişkenler
   ulong pos[];
   int   size;
//--- hata değerini sıfırla
   ResetLastError();
//--- dosyayı aç
   int file_handle=FileOpen(InpDirectoryName+"//"+InpFileName,FILE_READ|FILE_TXT|InpEncodingType);
   if(file_handle!=INVALID_HANDLE)
     {
      PrintFormat("%s dosyası, okuma için müsait",InpFileName);
      //--- dosyadaki her bir dizgi için başlangıç konumu al
      GetStringPositions(file_handle,pos);
      //--- dosyadaki dizgilerin sayısını tanımla
      size=ArraySize(pos);
      if(!size)
        {
         //--- dosyada dizgi yoksa dur
         PrintFormat("%s dosyası boş!",InpFileName);
         FileClose(file_handle);
         return;
        }
      //--- dizgi sayısını rassal olarak seç
      int ind=MathRand()%size;
      //--- konumu dizginin başlangıç noktasına kaydır
      FileSeek(file_handle,pos[ind],SEEK_SET);
      //--- ind sayısı ile dizgiyi oku ve çıktıla
      PrintFormat("%d numaralı dizgi metni: \"%s\"",ind,FileReadString(file_handle));
      //--- dosyayı kapat
      FileClose(file_handle);
      PrintFormat("%s dosyası kapatıldı",InpFileName);
     }
   else
      PrintFormat("%s dosyası açılamadı, Hata kodu = %d",InpFileName,GetLastError());
  }
//+-------------------------------------------------------------------------------+
//| Bu fonksiyon, dosyadaki her dizgi için başlangıç konumları tanımlar           |
//| ve bunları arr dizisine yerleştirir                                           |
//+-------------------------------------------------------------------------------+
void GetStringPositions(const int handle,ulong &arr[])
  {
//--- varsayılan dizi büyüklüğü
   int def_size=127;
//--- dizi için bellek tahsis et
   ArrayResize(arr,def_size);
//--- dizgi sayacı
   int i=0;
//--- bu, dosyanın sonu değilse, hala en azından bir dizgi kalmıştır
   if(!FileIsEnding(handle))
     {
      arr[i]=FileTell(handle);
      i++;
     }
   else
      return// dosya boş, çık
//--- kaydırmayı kodlama biçimine göre ve bayt bazında tanımla
   int shift;
   if(FileGetInteger(handle,FILE_IS_ANSI))
      shift=1;
   else
      shift=2;
//--- dizgileri döngü içinde incele
   while(1)
     {
      //--- dizgiyi oku
      FileReadString(handle);
      //--- dosya sonunu kontrol et
      if(!FileIsEnding(handle))
        {
         //--- bir sonraki dizginin konumunu kaydet
         arr[i]=FileTell(handle)+shift;
         i++;
         //--- taşma varsa dizi büyüklüğünü artır
         if(i==def_size)
           {
            def_size+=def_size+1;
            ArrayResize(arr,def_size);
           }
        }
      else
         break// dosyanın sonuna gelindi, çık
     }
//--- dizinin gerçek büyüklüğünü tanımla
   ArrayResize(arr,i);
  }