Descargar MetaTrader 5

FileWriteArray

Esta función escribe los arrays de cualquier tipo, excepto los arrays para las cadenas, en un archivo del tipo BIN (puede ser un array de estructuras que no contienen cadenas ni arrays dinámicos).

uint  FileWriteArray(
   int          file_handle,         // manejador del archivo
   const void&  array[],             // matriz
   int          start=0,             // índice inicial en el array
   int          count=WHOLE_ARRAY    // número de elementos
   );

Parámetros

file_handle

[in]  Descriptor de archivo devuelto por la función FileOpen().

array[]

[out]  Array a grabar.

start=0

[in]  Índice inicial en el array (número del primer elemento a grabar).

count=WHOLE_ARRAY

[in]  Número de elementos que se graban (WHOLE_ARRAY significa que se graban todos los elementos empezando desde el número start hasta el final del array).

Valor devuelto

Número de elementos grabados.

Nota

Un array de cadenas puede ser grabado sólo en un archivo del tipo TXT. En este caso las cadenas automáticamente se acaban con los caracteres de salto de línea "\r\n". Dependiendo del tipo de archivo ANSI o UNICODE, las cadenas se convierten a la codificación ansi o no.

Ejemplo:

//+------------------------------------------------------------------+
//|                                          Demo_FileWriteArray.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"
//--- parámetros de entrada
input string InpFileName="data.bin";
input string InpDirectoryName="SomeFolder";
//+------------------------------------------------------------------+
//| Estructura para almacenar los datos sobre los precios                            |
//+------------------------------------------------------------------+
struct prices
  {
   datetime          date; // fecha
   double            bid;  // precio bid
   double            ask;  // precio ask
  };
//--- variables globales
int    count=0;
int    size=20;
string path=InpDirectoryName+"//"+InpFileName;
prices arr[];
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- adjudicación de la memoria para el array
   ArrayResize(arr,size);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- escribir count cadenas restantes, si count<n
   WriteData(count);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- guardamos los datos en el array
   arr[count].date=TimeCurrent();
   arr[count].bid=SymbolInfoDouble(Symbol(),SYMBOL_BID);
   arr[count].ask=SymbolInfoDouble(Symbol(),SYMBOL_ASK);
//--- mostramos los datos actuales
   Print("Date = ",arr[count].date," Bid = ",arr[count].bid," Ask = ",arr[count].ask);
//--- aumentamos el contador
   count++;
//--- si el array ya esta lleno, escribimos los datos en el archivo y lo ponemos a cero
   if(count==size)
     {
      WriteData(size);
      count=0;
     }
  }
//+------------------------------------------------------------------+
//| Escritura de n elementos del array en el archivo                                |
//+------------------------------------------------------------------+
void WriteData(const int n)
  {
//--- abrimos el archivo
   ResetLastError();
   int handle=FileOpen(path,FILE_READ|FILE_WRITE|FILE_BIN);
   if(handle!=INVALID_HANDLE)
     {
      //--- escribimos los datos del array al final del archivo
      FileSeek(handle,0,SEEK_END);
      FileWriteArray(handle,arr,0,n);
      //--- cerramos el archivo
      FileClose(handle);
     }
   else
      Print("Failed to open the file, error ",GetLastError());
  }

Véase también

Variables, FileSeek


Actualizado: 2015.12.03