Jede Anfängerfrage, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Nirgendwo ohne dich - 6. - Seite 1119

 
Top2n:
Als Ergebnis habe ich durch 8000 geteilt, so dass die Werte des Arrays in ihre Indizes passen

Sag du es mir...

DateiGröße

Gibt die Dateigröße in Bytes zurück.

Typ

Größe in Bytes

Positiver Mindestwert

Maximaler Wert

Analog in C++

Schwimmer

4

1.175494351e-38

3.402823466e+38

Schwimmer

doppelt

8

2.2250738585072014e-308

1.7976931348623158e+308

doppelt


Dateigröße in Bytes, die vom Typ double belegte Größe in Bytes, die durch zhzhezhezhezhezhezhezhez zu dividieren ist



 
Alexey Viktorov:

Sag du es mir...

Typ

Größe in Bytes

Minimaler positiver Wert

Maximaler Wert

Analog in C++

Schwimmer

4

1.175494351e-38

3.402823466e+38

Schwimmer

doppelt

8

2.2250738585072014e-308

1.7976931348623158e+308

doppelt


Dateigröße in Bytes, die vom Typ double belegte Größe in Bytes, und es ist obligatorisch, durch zhzhezhezhezhezhezhezhezhez zu teilen



Was ist zzzzzzzzzz? Das macht keinen Sinn, Mann, kannst du es nicht einfacher machen?
 
Top2n:
Was ist ein Zzzzzz? Das passt nicht zusammen. Kannst du dich nicht beruhigen?
Bitte benutzen Sie Ihr Gehirn ein wenig. Ich kann Sie nur beraten, nicht für Sie handeln. Was sind Ihre Daten, wie groß ist das Array... Ich möchte mich nicht an all das erinnern und Sie zum Sieg führen.
 

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

 


Der Code der Zeile, die die bin-Datei um einen neuen Balken ergänzt

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);//записываем в файл все элементы массива

 


Der Code der Zeile, die die bin-Datei um einen neuen Takt ergänzt

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


Ich weiß nicht mehr, wo ich es gelesen habe, aber wenn man eine Datei nur zum Schreiben öffnet, wird alles darin gelöscht.

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

Die Datei muss zum Lesen und Schreiben geöffnet werden

int handle = FileOpen(path, FILE_READ|FILE_WRITE|FILE_BIN);
Wenn wir die Datei nur zum Lesen öffnen, dann kann und sollte das Schreibflag nicht angegeben werden.
 
Alexey Viktorov:

Ich weiß nicht mehr, wo ich es gelesen habe, aber wenn eine Datei nur zum Schreiben geöffnet wird, wird alles in ihr gelöscht.

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

Die Datei muss zum Lesen und Schreiben geöffnet werden

int handle = FileOpen(path, FILE_READ|FILE_WRITE|FILE_BIN);
Wenn wir die Datei nur zum Lesen öffnen, dann kann und sollte das Schreibflag nicht angegeben werden.
Verzeihen Sie mir, aber ich habe bereits gelöst)) das Problem war einer von diesen zu)) Durch Herumstochern))))
 

Ich dachte, das war's.

Wenn ich neue Daten an den Anfang schreibe, wird der gesamte Anfang beschrieben. Gibt es eine Möglichkeit, die Größe des Anfangs zu erhöhen?)

Ich meine, kann man nur bis zum Anfang schreiben oder auch bis zum Ende speichern?

FileSeek(handle,0,SEEK_SET);

Und wenn ich bis zum Ende speichere und weiter bis zum Ende hinzufüge, wie lese ich dann vom Ende her den richtigen Betrag ab? Oder vielmehr, wie man aus der bin-Datei den richtigen Abschnitt vonN bis zum Ende erfasst

Oder habe ich es mit den falschen Befehlen gemacht!?

Ich speichere zwei Arrays am Ende ab - es wird so geschrieben, wie ich es verstehe, indem ich das Gewicht der Tonne richtig erhöhe.

Dann versuche ich, Daten in das Array zu übertragen, mit der Aufgabe, den letzten Datensatz zu erfassen, wobei die Dateibins größer sind als das Array.

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

Wenn ich den erforderlichen Abschnitt aus der Binärdatei mit

FileReadArray(file_handle,arr,0,WHOLE_ARRAY);

Der Algorithmus verarbeitet das Array selbst, die fehlenden Zellen werden ähnlich wie die Position im Bin übersetzt, was wiederum den gewünschten Bereich an der Grenze der gleichen Position wie im Bin ergibt, nur mit Nullen.

 
Top2n:

Wenn ich den erforderlichen Abschnitt aus der Binärdatei mit

FileReadArray(file_handle,arr,0,WHOLE_ARRAY);

Der Algorithmus verarbeitet das Array selbst, fehlende Zellen werden in ähnlicher Weise in die binäre Position übersetzt, was wiederum den angeforderten Bereich in der Grenze der gleichen Position wie in der Binärdatei ergibt, nur mit Nullen.

Ich verstehe nicht, was da schief gehen kann...

Sie öffnen die Datei einfach zum Lesen.

handle = FileOpen(path, FILE_READ|FILE_BIN);

Verschiebung des Zeigers um die richtige Anzahl von Bytes in die richtige Richtung

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

32 Bytes sind 8 Ganzzahlwerte oder 4 Gleitkommawerte.

Wenn das Array zweidimensional ist, bedeutet dies, dass wir um 4 Zeilen verschieben, wenn das Array vom Typ int ist, oder um 2 Zeilen, wenn das Array vom Typ double ist

Dann lesen wir die Werte in das zuvor als dynamisches arr[][2] deklarierte Array ein; dies ist ein zweidimensionales Array.

FileReadArray(handle, arr);

DAS WAR'S!!!

Bestimmen Sie dann die Größe des Arrays

int size = ArrayRange(arr, 0);

und drucken dann die Werte aus.

int i, z;

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

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

Ich verstehe nicht, was da schief gehen kann...

Vielen Dank, Sie! Es hat funktioniert)))