Caractéristiques du langage mql5, subtilités et techniques - page 65

 

Pouvez-vous me dire comment réduire la taille d'un fichier de données binaires à la nouvelle taille des données sans supprimer le fichier lui-même, ou cela ne peut se faire qu'en appelant une dll externe?

 
Konstantin:

Pouvez-vous me dire comment réduire un fichier de données binaires à une nouvelle taille de données sans supprimer le fichier lui-même, ou cela n'est-il possible qu'en appelant une dll externe?

J'ai besoin d'un analogue de la fonction SetEndOfFile.

Il a été demandé à ce sujet il y a environ 6 ans

 
Combinateur:

Nous avons besoin d'un analogue de la fonction SetEndOfFile.

On lui a posé la question il y a environ 6 ans.

C'est pour cela que j'écris)) car il n'est pas kasher d'utiliser des dll externes ou de supprimer un fichier.

 
Combinateur:

Nous avons besoin d'un analogue de la fonction SetEndOfFile.

On lui a posé la question il y a environ 6 ans.

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:

le fichier ne fera qu'augmenter de taille, si le tableau de données diminue de taille, le fichier restera le même.

 
Konstantin:

La taille du fichier ne fera qu'augmenter; si la taille du tableau de données diminue, le fichier restera de la même taille.

Diminue.

 
fxsaber:
C'est une sacrée surenchère, n'est-ce pas ?
 
Combinateur:
C'est une sacrée surenchère.

Absolument !

 
Encore une fois sur le sujet du double

Forum sur le trading, les systèmes de trading automatisés et les tests de stratégies de trading

Bugs, bugs, questions

fxsaber, 2018.01.15 11:53

Parce que l'entrée fmod est double. Double ne peut pas stocker un grand nombre d'entiers. Par exemple, votre affaire :

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

Faites-le.

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


En prenant l'exemple de float, vous pouvez rapidement comprendre la particularité 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;
    }
}


Résultat

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


Le double SZY ne perd pas toute la portée intérieure, ce qui n'est pas le cas du long.

 
Konstantin:

c'est ce sur quoi j'écris )) parce que ce n'est pas kasher de le faire par le biais de dlls externes ou de la suppression de fichiers.

je l'ai vu, je voulais le faire mais j'ai oublié

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