Características del lenguaje mql5, sutilezas y técnicas - página 65

 

¿Pueden decirme cómo reducir el tamaño de un archivo de datos binarios al nuevo tamaño de los datos sin eliminar el propio archivo, o sólo puede hacerse llamando a una dll externa?

 
Konstantin:

¿Pueden decirme cómo reducir un archivo de datos binarios a un nuevo tamaño de datos, sin eliminar el propio archivo, o sólo se puede implementar llamando a una dll externa?

Necesito un análogo de la función SetEndOfFile.

Se preguntó al respecto hace unos 6 años

 
Combinador:

Necesitamos un análogo de la función SetEndOfFile.

Se preguntó al respecto hace unos 6 años.

Por eso estoy escribiendo )) porque no es kasher usar dlls externos o borrar un archivo

 
Combinador:

Necesitamos un análogo de la función SetEndOfFile.

Se preguntó al respecto hace unos 6 años.

bool SetEndOfFile( const string FileName, const uint Size, const int Commong_Flag = 0 )
{
  uchar Buffer[];
  
  return((FileLoad(FileName, Buffer, Commong_Flag) > Size) && ArrayResize(Buffer, Size) && FileSave(FileName, Buffer, Commong_Flag)));
}
 
fxsaber:

el archivo sólo aumentará de tamaño, si la matriz de datos disminuye de tamaño, el archivo seguirá siendo el mismo

 
Konstantin:

El archivo sólo aumentará de tamaño; si la matriz de datos disminuye de tamaño, el archivo seguirá teniendo el mismo tamaño.

Disminuye.

 
fxsaber:
Eso es un exceso, ¿no?
 
Combinador:
Eso es un exceso.

Por supuesto.

 
Una vez más sobre el tema del doble

Foro sobre trading, sistemas de trading automatizados y pruebas de estrategias de trading

Bichos, errores, preguntas

fxsaber, 2018.01.15 11:53

Porque el fmod de entrada es doble. Double no puede almacenar un gran número de enteros. Por ejemplo, su caso:

Print(DoubleToString((double)131472503841474907, 0)); // 131472503841474912

Haz esto.

long fmod( const long Value, const long Value2 )
{
  return(Value % Value2);
}


Utilizando el ejemplo de float, se puede entender rápidamente la peculiaridad de double

#define  PRINT(A) Print(#A + " = " + (string)(A))

void OnStart()
{
  for (int i = 0; i < INT_MAX; i++)
    if ((int)(float)i != i)
    {
      PRINT(i);
      PRINT((float)i);
      PRINT((double)i);
      
      break;
    }
}


Resultado

i = 16777217
(float)i = 16777216.0
(double)i = 16777217.0


El doble SZY no pierde todo el rango de entrada, no así con el largo.

 
Konstantin:

eso es lo que estoy escribiendo )) porque no es kasher para hacerlo a través de dlls externos o la eliminación de archivos

lo vi, quise hacerlo pero lo olvidé

Ошибки, баги, вопросы
Ошибки, баги, вопросы
  • 2011.08.01
  • www.mql5.com
Общее обсуждение: Ошибки, баги, вопросы