Merkmale der Sprache mql5, Feinheiten und Techniken - Seite 65

 

Können Sie mir sagen, wie ich die Größe einer Binärdatei auf die neue Datengröße reduzieren kann, ohne die Datei selbst zu entfernen, oder kann dies nur durch den Aufruf einer externen DLL erfolgen?

 
Konstantin:

Können Sie mir sagen, wie ich eine binäre Datendatei auf eine neue Datengröße reduzieren kann, ohne die Datei selbst zu entfernen, oder ist dies nur durch den Aufruf einer externen DLL möglich?

Ich brauche ein Analogon der Funktion SetEndOfFile.

Es wurde vor etwa 6 Jahren danach gefragt

 
Kombinator:

Wir brauchen ein Analogon der Funktion SetEndOfFile.

Es wurde vor etwa 6 Jahren danach gefragt.

Das ist es, worüber ich schreibe )), weil es nicht kasher ist, externe DLLs zu verwenden oder eine Datei zu löschen

 
Kombinator:

Wir brauchen ein Analogon der Funktion SetEndOfFile.

Es wurde vor etwa 6 Jahren danach gefragt.

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:

die Datei wird nur größer, wenn das Datenfeld kleiner wird, bleibt die Datei gleich

 
Konstantin:

Die Datei wird nur größer; wenn sich das Datenfeld verkleinert, bleibt die Größe der Datei gleich.

Verringert sich.

 
fxsaber:
Das ist doch ein ziemlicher Overkill, oder?
 
Kombinator:
Das ist ein ziemlicher Overkill.

Ganz genau!

 
Noch einmal zum Thema Doppeltes

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

Wanzen, Wanzen, Fragen

fxsaber, 2018.01.15 11:53

Denn die Eingabe fmod ist doppelt. Double kann nicht eine große Anzahl von ganzen Zahlen speichern. Zum Beispiel Ihr Fall:

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

Tun Sie dies.

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


Am Beispiel von float lässt sich die Besonderheit von double schnell nachvollziehen

#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;
    }
}


Ergebnis

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


Der SZY-Doppelgänger verliert nicht den gesamten inneren Bereich, nicht so bei Long.

 
Konstantin:

Das ist es, worüber ich schreibe)), weil es nicht kasher ist, es durch externe DLLs oder das Löschen von Dateien zu tun

sah es, wollte es, vergaß es aber

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