Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 1119

 
Top2n:
в итоге я поделил на 8000 чтоб значения массива встали в свои индексы

Тебе видней...

FileSize

Возвращает размер файла в байтах.

Тип

Размер в байтах

Минимальное положительное значение

Максимальное значение

Аналог в С++

float

4

1.175494351e-38

3.402823466e+38

float

double

8

2.2250738585072014e-308

1.7976931348623158e+308

double


Размер файла в байтах, размер занимаемый типом double в байтах, а делить обязательно надо через жжжжжжжжжжжжжжжжж



 
Alexey Viktorov:

Тебе видней...

Тип

Размер в байтах

Минимальное положительное значение

Максимальное значение

Аналог в С++

float

4

1.175494351e-38

3.402823466e+38

float

double

8

2.2250738585072014e-308

1.7976931348623158e+308

double


Размер файла в байтах, размер занимаемый типом double в байтах, а делить обязательно надо через жжжжжжжжжжжжжжжжж



Что такое жжжжж? Он у меня не сходится, блин а нельзя полегче?
 
Top2n:
Что такое жжжжж? Он у меня не сходится, блин а нельзя полегче?
Пожалуйста напряги свои извилины хоть чуток. Я могу только подсказать, а не делать за тебя. Какие у тебя данные, какая размерность массива... у меня нет желания всё это помнить и вести тебя за ручку к победе.
 

Получается, что если массив динамический, то формула /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);//записываем в файл все элементы массива

 


Код строчки дополняющей бин фаил при новом баре

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


 

 
Top2n:

Получается, что если массив динамический, то формула /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);//записываем в файл все элементы массива

 


Код строчки дополняющей бин фаил при новом баре

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);
Если-же открываем файл только для чтения, то флаг записи можно и даже лучше не указывать.
 
Alexey Viktorov:

Я не помню где читал, но если файл открывается только для записи, то всё что в нём было удаляется.

int handle=FileOpen(path,FILE_WRITE|FILE_BIN);

Файл надо открывать для чтения и записи

int handle = FileOpen(path, FILE_READ|FILE_WRITE|FILE_BIN);
Если-же открываем файл только для чтения, то флаг записи можно и даже лучше не указывать.
Вы меня простите, но я уже справился) проблема одна из этих была тоже)) Путем тыка нарыл)))
 

ААА думал что все вышло

Записываю в начало новые данные, он записывает до полного начало, можно ли как нибудь увеличить размер начало))

То есть ограниченна ли запись в начало? или продолжать сохранение только в конец ?

FileSeek(handle,0,SEEK_SET);

И если я сохраню данные в конец, и продолжу добавлять в конец, то как мне прочитать от конца до нужного количества?  Вернее сказать, как захватить с бин файла нужный кусок отN до конца

Или неужели не теми командами делал!?!?

Сохраняю два массива в конец - записывается как понимаю по увеличению веса бин правильно.

Далее пытаюсь перенести данные в массив с задачей захватить по последнюю запись, фаил бин по размерности больше чем массив.

  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);  что делает  - определяет положение массива или в бине?
 

Если считываю нужный участок с бинарного файла с помощью 

FileReadArray(file_handle,arr,0,WHOLE_ARRAY);

То желаемого результата не удается достичь, алгоритм обрабатывает сам массив, не попавшие в заданный участок ячейки, транслируются аналогично положению в бине, что в свою очередь  выдает запрошенный промежуток в пределе того же положения что и в бине только с нулями.

 
Top2n:

Если считываю нужный участок с бинарного файла с помощью 

FileReadArray(file_handle,arr,0,WHOLE_ARRAY);

То желаемого результата не удается достичь, алгоритм обрабатывает сам массив, не попавшие в заданный участок ячейки, транслируются аналогично положению в бине, что в свою очередь  выдает запрошенный промежуток в пределе того же положения что и в бине только с нулями.

Я не понимаю что может не получаться...

Просто тупо открываешь файл для чтения

handle = FileOpen(path, FILE_READ|FILE_BIN);

смещаешь указатель на нужное количество байт в нужном направлении

FileSeek(handle, -32, SEEK_END);
// В данном случае от конца файла на 32 байта

32 байта это 8 целочисленных значений или 4 значения с плавающей точкой.

Если массив двухмерный это значит что сдвигаем на 4 строки если массив типа int или на 2 строки если тип массива double

Далее читаем значения в массив объявленный заранее как динамический arr[][2]; Это двухмерный массив.

FileReadArray(handle, arr);

ВСЁ!!!

Дальше определяешь размер массива

int size = ArrayRange(arr, 0);

и печатаешь полученные значения

int i, z;

for(i = 0; i < size; i++)

  {
   for(z = 0; z < 2; z++)
    {
     Print("arr[", i, "][", z, "]", arr[i][z]);
    }
  }
 
Alexey Viktorov:

Я не понимаю что может не получаться...

 Благодарю, Вас! Удалось)))

Причина обращения: