FileTell

Il file restituisce la posizione corrente del puntatore di un file aperto.

ulong  FileTell(
   int  file_handle    // File handle
   );

Parametri

file_handle

[in] Il descrittore di file restituito da FileOpen().

Valore restituito

Posizione attuale del descrittore del file in byte dall'inizio del file.

Nota

Per ottenere informazioni sull' errore chiamare GetLastError().

Esempio:

//+--------------------------------------------------------------------------------+
//|                                                              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"
//--- mostra la finestra dei parametri di input quando lancia lo script
#property script_show_inputs
//--- parametri di input
input string InpFileName="file.txt";    // nome del file
input string InpDirectoryName="Data";   // nome della directory
input int    InpEncodingType=FILE_ANSI// ANSI=32 or UNICODE=64
//+--------------------------------------------------------------------------------+
//| Funzione di avvio del programma Script                                         |
//+--------------------------------------------------------------------------------+
voidOnStart()
  {
//--- specifica il valore della variabile per generare numeri casuali
   _RandomSeed=GetTickCount();
//--- variabili per le posizioni dei punti di inizio della stringa
   ulong pos[];
   int   size;
//--- resetta il valore dell' errore
   ResetLastError();
//--- apre il file
   int file_handle=FileOpen(InpDirectoryName+"//"+InpFileName,FILE_READ|FILE_TXT|InpEncodingType);
   if(file_handle!=INVALID_HANDLE)
     {
      PrintFormat("%s il file è disponibile per la lettura",InpFileName);
      //--- riceve la posizione d'inizio per ogni stringa nel file
      GetStringPositions(file_handle,pos);
      //--- definisce il numero di stringhe nel file
      size=ArraySize(pos);
      if(!size)
        {
         //--- si ferma se il file non ha stringhe
         PrintFormat("il file %s è vuoto!",InpFileName);
         FileClose(file_handle);
         return;
        }
      //--- fa una selezione casuale di un numero di stringa
      int ind=MathRand()%size;
      //--- slitta la posizione al punto iniziale della stringa
      FileSeek(file_handle,pos[ind],SEEK_SET);
      //--- legge e fa il print della stringa con il numero ind
      PrintFormat("Testo della stringa con il numero %d: \"%s\"",ind,FileReadString(file_handle));
      //--- chiude il file
      FileClose(file_handle);
      PrintFormat("il file %s è stato chiuso",InpFileName);
     }
   else
      PrintFormat("Fallimento nell'aprire il file %s, Codice errore = %d",InpFileName,GetLastError());
  }
//+-------------------------------------------------------------------------------+
//| La funzione definisce i punti di inizio per ogni stringa nel file e           |
//| li piazza nell'array arr                                                      |
//+-------------------------------------------------------------------------------+
void GetStringPositions(const int handle,ulong &arr[])
  {
//--- grandezza array di default
   int def_size=127;
//--- alloca la memoria per l'array
   ArrayResize(arr,def_size);
//--- contatore stringa
   int i=0;
//--- se questa non è la fine del file, allora c'è ancora una stringa
   if(!FileIsEnding(handle))
     {
      arr[i]=FileTell(handle);
      i++;
     }
   else
      return// il file è vuoto, esce
//--- definisce lo slittamento in byte a seconda della codifica
   int shift;
   if(FileGetInteger(handle,FILE_IS_ANSI))
      shift=1;
   else
      shift=2;
//--- va attraverso le stringhe nel loop
   while(1)
     {
      //--- legge la stringa
      FileReadString(handle);
      //--- controlla la fine del file
      if(!FileIsEnding(handle))
        {
         //--- memorizza la posizione della prossima stringa
         arr[i]=FileTell(handle)+shift;
         i++;
         //--- incrementa la grandezza dell'array se è stato riempito
         if(i==def_size)
           {
            def_size+=def_size+1;
            ArrayResize(arr,def_size);
           }
        }
      else
         break// fine del file, uscita
     }
//--- definisce l'attuale grandezza dell'array
   ArrayResize(arr,i);
  }