mql5言語の特徴、微妙なニュアンスとテクニック - ページ 65

 

バイナリデータファイルのサイズを新しいデータサイズに縮小するには、ファイル自体を削除することなく、外部のDLLを 呼び出すことでしかできないのか、その方法を教えてください。

 
コンスタンチン

バイナリデータファイルをファイル自体を削除せずに新しいデータサイズに縮小する方法を教えてください。それとも、外部のDLLを 呼び出すことでしかできないのでしょうか?

SetEndOfFile関数のアナログが必要です。

6年程前に質問されたものです。

 
コンビナート です。

SetEndOfFile関数のアナログが必要です。

6年ほど前にも聞かれたことがある。

それが私が書いていることです))外部DLLを 使ったり、ファイルを削除するのはカスリもしないので

 
コンビナート です。

SetEndOfFile関数のアナログが必要です。

6年ほど前にも聞かれたことがある。

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

の場合、ファイルのサイズが大きくなるだけで、データアレイのサイズが小さくなっても、ファイルのサイズは変わりません。

 
コンスタンチン

ファイルのサイズが大きく なるだけで、データ配列のサイズが小さくなっても、ファイルは同じサイズのままです。

減少しています。

 
fxsaber
すごいやりすぎじゃないですか?
 
コンビナート です。
とんでもないやりすぎだ。

もちろんです!(笑

 
もう一度、ダブルの話題について

トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム

バグ、バグ、質問

fxsaber さん 2018.01.15 11:53

入力のfmodがdoubleであるため。Doubleは膨大な数の整数を格納することができません。例えば、あなたの場合。

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

これをやってください。

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


floatを例にとると、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;
    }
}


結果

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


SZYダブルはインレンジを全て失わない、ロングではそうはいかない

 
コンスタンチン

外部DLLや ファイル削除でやるのはカスリもしないので、そういうことを書いているのです ))

見た、見たかったけど忘れた

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