Получается, что если массив динамический, то формула /16, не совсем подходит, хотя второе же измерение фиксировано, к там уже -
Выходит, что вторичный массив записывается на первичный, возможно перед записью что то сделать нужно FileSeek(handle,0,SEEK_END); Люди записывают переменные в массив, возможно поможет? типо такого
int dataArraySize = ArraySize(dataArray); //записываем в переменную размер массива int fileHandle = FileOpen("filename.dat", FILE_BIN | FILE_WRITE); // открываем файл на запись в бинарном режиме. FileWriteInteger(fileHandle, dataArraySize);//записываем в файл размер массива FileWriteDouble(fileHandle, dataArraySize);//записываем в файл все элементы массива
bin ファイルに新しいバーを 補足する行のコード
if(count==size) { // ArrayResize(arrS,coun); for(int q=0; q<ARRAY_SIZE_X; q++) // Перебор по периоду, колонка X { arrS[q]=sm.d[q].m[rates_total-1]; // M(I) SMA coun++; } ResetLastError(); int handle=FileOpen(path,FILE_WRITE|FILE_BIN); if(handle!=INVALID_HANDLE) { //--- запишем данные массива в конец файла FileSeek(handle,0,SEEK_SET); FileWriteArray(handle,arrS); Print("arrS = ",arrS[0]," arrS = ",arrS[1]," arrS = ",arrS[3]); //--- закрываем файл FileClose(handle); } else Print("Failed to open the file, error ",GetLastError()); count=1; }
Получается, что если массив динамический, то формула /16, не совсем подходит, хотя второе же измерение фиксировано, к там уже -
Выходит, что вторичный массив записывается на первичный, возможно перед записью что то сделать нужно FileSeek(handle,0,SEEK_END); Люди записывают переменные в массив, возможно поможет? типо такого
int dataArraySize = ArraySize(dataArray); //записываем в переменную размер массива int fileHandle = FileOpen("filename.dat", FILE_BIN | FILE_WRITE); // открываем файл на запись в бинарном режиме. FileWriteInteger(fileHandle, dataArraySize);//записываем в файл размер массива FileWriteDouble(fileHandle, dataArraySize);//записываем в файл все элементы массива
bin ファイルに新しいバーを 補足する行のコード
if(count==size) { // ArrayResize(arrS,coun); for(int q=0; q<ARRAY_SIZE_X; q++) // Перебор по периоду, колонка X { arrS[q]=sm.d[q].m[rates_total-1]; // M(I) SMA coun++; } ResetLastError(); int handle=FileOpen(path,FILE_WRITE|FILE_BIN); if(handle!=INVALID_HANDLE) { //--- запишем данные массива в конец файла FileSeek(handle,0,SEEK_SET); FileWriteArray(handle,arrS); Print("arrS = ",arrS[0]," arrS = ",arrS[1]," arrS = ",arrS[3]); //--- закрываем файл FileClose(handle); } else Print("Failed to open the file, error ",GetLastError()); count=1; }
どこで読んだか忘れたが、書き込み専用のファイルを開くと、その中のものはすべて削除される。
int handle=FileOpen(path,FILE_WRITE|FILE_BIN);
ファイルを読み書きのために開く必要がある
int handle = FileOpen(path, FILE_READ|FILE_WRITE|FILE_BIN);
ResetLastError(); int file_handle=FileOpen(path,FILE_READ|FILE_BIN); if(file_handle!=INVALID_HANDLE) { //--- прочитаем все данные из файла в массив //file_siz=FileSize(file_handle)/8000; //FileSeek(file_handle,file_size,SEEK_END); FileReadArray(file_handle,arr); //--- получим размер массива int siz=ArraySize(arr); //--- распечатаем данные из массива Print("arr = ",arr[1][3]," Bid = ",arr[1][2]," Ask = ",arr[0][3]); Print("file_siza = ",file_siz); //--- закрываем файл FileClose(file_handle);
FileSeek(file_handle,file_size,SEEK_SET); что делает - определяет положение массива или в бине?
を8000で割ると、配列の値がインデックスに収まるようになりました。
教えてくれ...
ファイルサイズ
ファイルサイズをバイト数で 返します。
タイプ
サイズ(バイト)
正の最小値
最大値
C++でアナログ
うかぶ
4
1.175494351e-38
3.402823466e+38
うかぶ
二重
8
2.2250738585072014e-308
1.7976931348623158e+308
二重
ファイルサイズ(バイト),double 型が 占めるサイズ(バイト)を zhzhezhezhezhezhez で割る必要があります.
教えてくれ...
タイプ
サイズ(バイト)
正の最小値
最大値
C++でアナログ
うかぶ
4
1.175494351e-38
3.402823466e+38
うかぶ
二重
8
2.2250738585072014e-308
1.7976931348623158e+308
二重
ファイルサイズをバイト単位で,double型が 占めるサイズをバイト単位で,zhzhezhezhezhezhezhezで割ることが義務付けられています。
zzzzってなんだ?腑に落ちない、のんびりできないのか?
Получается, что если массив динамический, то формула /16, не совсем подходит, хотя второе же измерение фиксировано, к там уже -
FileSeek(handle,0,SEEK_END);
Люди записывают переменные в массив, возможно поможет? типо такого
int dataArraySize = ArraySize(dataArray); //записываем в переменную размер массива
int fileHandle = FileOpen("filename.dat", FILE_BIN | FILE_WRITE); // открываем файл на запись в бинарном режиме.
FileWriteInteger(fileHandle, dataArraySize);//записываем в файл размер массива
FileWriteDouble(fileHandle, dataArraySize);//записываем в файл все элементы массива
bin ファイルに新しいバーを 補足する行のコード
{
// ArrayResize(arrS,coun);
for(int q=0; q<ARRAY_SIZE_X; q++) // Перебор по периоду, колонка X
{
arrS[q]=sm.d[q].m[rates_total-1]; // M(I) SMA
coun++;
}
ResetLastError();
int handle=FileOpen(path,FILE_WRITE|FILE_BIN);
if(handle!=INVALID_HANDLE)
{
//--- запишем данные массива в конец файла
FileSeek(handle,0,SEEK_SET);
FileWriteArray(handle,arrS);
Print("arrS = ",arrS[0]," arrS = ",arrS[1]," arrS = ",arrS[3]);
//--- закрываем файл
FileClose(handle);
}
else
Print("Failed to open the file, error ",GetLastError());
count=1;
}
Получается, что если массив динамический, то формула /16, не совсем подходит, хотя второе же измерение фиксировано, к там уже -
FileSeek(handle,0,SEEK_END);
Люди записывают переменные в массив, возможно поможет? типо такого
int dataArraySize = ArraySize(dataArray); //записываем в переменную размер массива
int fileHandle = FileOpen("filename.dat", FILE_BIN | FILE_WRITE); // открываем файл на запись в бинарном режиме.
FileWriteInteger(fileHandle, dataArraySize);//записываем в файл размер массива
FileWriteDouble(fileHandle, dataArraySize);//записываем в файл все элементы массива
bin ファイルに新しいバーを 補足する行のコード
{
// ArrayResize(arrS,coun);
for(int q=0; q<ARRAY_SIZE_X; q++) // Перебор по периоду, колонка X
{
arrS[q]=sm.d[q].m[rates_total-1]; // M(I) SMA
coun++;
}
ResetLastError();
int handle=FileOpen(path,FILE_WRITE|FILE_BIN);
if(handle!=INVALID_HANDLE)
{
//--- запишем данные массива в конец файла
FileSeek(handle,0,SEEK_SET);
FileWriteArray(handle,arrS);
Print("arrS = ",arrS[0]," arrS = ",arrS[1]," arrS = ",arrS[3]);
//--- закрываем файл
FileClose(handle);
}
else
Print("Failed to open the file, error ",GetLastError());
count=1;
}
どこで読んだか忘れたが、書き込み専用のファイルを開くと、その中のものはすべて削除される。
ファイルを読み書きのために開く必要がある
どこで読んだか忘れましたが、書き込みのためだけにファイルを開くと、その中のものはすべて削除されるそうです。
ファイルを読み書きのために開く必要がある
と思っていたのですが、そうではありませんでした。
新しいデータを先頭に書き込むと、先頭いっぱいに書き込まれるのですが、先頭のサイズを大きくする方法はありませんか))
つまり、冒頭までしか書き込めないのか、それとも最後まで保存し続けられるのか、ということです。
また、最後まで保存し、さらに追加し続けた場合、最後から適量までどのように読み取ればいいのでしょうか?というか、Nから最後までの正しいチャンクをbinファイルからキャプチャするにはどうしたらいいのでしょうか?
それとも、間違ったコマンドでやってしまったのか!?
最後に2つの配列を保存し、ビンの重量を正しく増加させることで理解できるように書かれています。
そこで、最後のレコードをキャプチャするタスクで配列にデータを転送しようとすると、ファイルのbinが配列より大きくなってしまいます。
int file_handle=FileOpen(path,FILE_READ|FILE_BIN);
if(file_handle!=INVALID_HANDLE)
{
//--- прочитаем все данные из файла в массив
//file_siz=FileSize(file_handle)/8000;
//FileSeek(file_handle,file_size,SEEK_END);
FileReadArray(file_handle,arr);
//--- получим размер массива
int siz=ArraySize(arr);
//--- распечатаем данные из массива
Print("arr = ",arr[1][3]," Bid = ",arr[1][2]," Ask = ",arr[0][3]);
Print("file_siza = ",file_siz);
//--- закрываем файл
FileClose(file_handle);
でバイナリファイルから必要なセクションを読み込むと、そのセクションが表示されます。
アルゴリズムは配列そのものを処理し、欠落したセルはビン内の位置と同様に変換され、ビン内と同じ位置の限界で要求された範囲をゼロのみで与える。
でバイナリファイルから必要なセクションを読み込むと、そのセクションが表示されます。
このアルゴリズムでは配列そのものを処理し、欠落したセルはバイナリ位置に同様に変換され、バイナリ位置と同じ位置の限界で要求された範囲をゼロのみで提供する。
何が悪いのか理解できない......。
あなたは ただ、読むためにファイルを 開くだけです。
ポインタを正しい方向に正しいバイト数だけシフトする
// В данном случае от конца файла на 32 байта
32バイトは整数値で8個、浮動小数点値で4個です。
配列が2次元の場合,int型なら4行分,double型なら2行分シフトすることを意味します
そして、あらかじめダイナミックなarr[][2]として宣言された配列に値を読み込む。これは2次元の配列である。
それだ!!!!
次に、配列の大きさを決定します
を実行し、その値を表示します。
int i, z;
for(i = 0; i < size; i++)
{for(z = 0; z < 2; z++)
{
Print("arr[", i, "][", z, "]", arr[i][z]);
}
}
何が悪いのか理解できない......。
ありがとうございました。うまくいった)))