double Erray[2,1];// [1,0]; Erray[0,0]=pastfractalup; Erray[1,0]=pastfractaldown;an array[2] has index 0 and 1
and when it write the data in the file become blank.
i had change it, but now the problem is, it only attempt to read or write the file, why?
and when it write the data in the file become blank.
handle1=FileOpen(File_Name,FILE_CSV|FILE_WRITE,";");// File opening write=FileWriteDouble(handle1,Erray[0,0],DOUBLE_VALUE); FileReadArray(handle2,Erray, 0, 2);
You are creating a TEXT file (CSV) and you are using a BINARY write/read functions.
Also the third parameter to FileOpen is an int not a string. RTFM
can you guide me further?
how do i change the binary write to something else?i didnt see any tutorial about that,
Thx a lot.
i had successfully writing the data to the file
int handle1; // File descriptor string File_Name="mydata1.csv"; // File name string Erray[2,1]; // Array string read; Erray[0,0]=fractalup; Erray[1,0]=fractaldown; { handle1=FileOpen(File_Name,FILE_CSV|FILE_WRITE,";"); //File opening if(fractalup>0) { FileWrite(handle1,Erray[0,0]); //Writing to the file if(write < 0) // If failed { FileClose(handle1); // File closing return; // Exit start() } } Alert("The ",File_Name," file updated."); // Message FileClose(handle1); }
now my question is, why the data is not stored in the file?
when fractalup>0, it wrote the value of fractalup,
but then when fractalup=0, the data in the file also became 0, i wonder why?i had no other code related to this one, i dont think it will write data to the file, but why it still gone blank?
You posting an incomplete code. What is the value of write ?
FileWrite(handle1,Erray[0,0]); //Writing to the file if (write < 0) // If failed
The reason why when fractalup = 0 the data is also 0 is because you using the the FILE_WRITE without FILE_READ. That way, the file operation overwrite/delete the previous data. Try to use
handle1=FileOpen(File_Name,FILE_CSV|FILE_WRITE|FILE_READ,";"); //File opening
I wrote this working script below base on your first code using binary file, but I thought WHRoeder's answer is sufficient enough so I didn't post it
#include <stdlib.mqh> //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int start() { PlaySound ("wait.wav"); int handle1, handle2, write; string File_Name = "mydata.bin"; double Erray1[2,2], Erray2[2,2]; Alert ("Declaring array ",ErrorDescription(GetLastError())); Erray1[0,0] = 1.23456; Alert ("Initialising array 0 0 ",ErrorDescription(GetLastError())); Erray1[1,0] = 2.34567; Alert ("Initialising array 1 0 ",ErrorDescription(GetLastError())); Erray1[0,1] = 3.45678; Alert ("Initialising array 0 1 ",ErrorDescription(GetLastError())); Erray1[1,1] = 4.56789; Alert ("Initialising array 1 1 ",ErrorDescription(GetLastError())); handle1 = FileOpen(File_Name,FILE_BIN|FILE_WRITE);// File opening Alert ("Opening handle 1 ",handle1," ",ErrorDescription(GetLastError())); write = FileWriteArray(handle1,Erray1, 0, 4); Alert ("Write the file ",write," ",ErrorDescription(GetLastError())); FileClose(handle1); handle2 = FileOpen(File_Name,FILE_BIN|FILE_READ);// File opening Alert ("Opening handle 2 ",handle2," ",ErrorDescription(GetLastError())); write = FileReadArray(handle2,Erray2, 0, 4); Alert ("Read the file ",write," ",ErrorDescription(GetLastError())); FileClose(handle2); string txt = DoubleToStr(Erray2[0,0], 8)+" | "+DoubleToStr(Erray2 [1,0],8)+" | "+DoubleToStr(Erray2 [0,1],8)+" | "+DoubleToStr(Erray2 [1,1],8); Alert ("See comment too ",txt); Comment ("\n",txt); return (0); }
You posting an incomplete code. What is the value of write ?
The reason why when fractalup = 0 the data is also 0 is because you using the the FILE_WRITE without FILE_READ. That way, the file operation overwrite/delete the previous data. Try to use
I wrote this working script below base on your first code using binary file, but I thought WHRoeder's answer is sufficient enough so I didn't post it
int handle1,handle2,write; // File descriptor string File_Name="mydata1.csv"; // File name string Erray[2,1]; // Array string read; Erray[0,0]=fractalup; Erray[1,0]=fractaldown; { handle1=FileOpen(File_Name,FILE_CSV|FILE_WRITE,";"); //File opening if(fractalup>0) { FileWrite(handle1,Erray[0,0]); //Writing to the file if(write < 0) // If failed { FileClose(handle1); // File closing return; // Exit start() } } //else FileClose(handle1); // File closing Alert("The ",File_Name," file updated."); // Message FileClose(handle1); } //------------------------------------------------------------------------ { handle2=FileOpen(File_Name,FILE_CSV|FILE_READ,";"); //File opening read=FileReadString(handle2); pastfractalup=StrToDouble(read); FileClose(handle2); }
sorry i didnt post the file entirely, now the file is nearly posted, the fractalup may =0 or 1.2345
the result is the same after using the file read,anymore suggestion?
if fractalup>0, it wrote the value of fractalup,this is done perfectly
but then when fractalup=0, the data in the file also became 0, should it be kept?
why it still gone blank?
I'm not so sure what you're looking for, so I re-write the code and I hope it fix this time
#include <stdlib.mqh> //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int start() { PlaySound ("wait.wav"); int handle1, handle2, write; // File variable string File_Name="mydata1.csv"; // File name string Erray[2,1]; // Array ==>> this array Erray [2, 1] is actually the same like Erray [2] string read; double fractalup = 1.234567890, fractaldown = 2.345678901, pastfractalup; Erray[0,0] = fractalup; Erray[1,0] = fractaldown; { if(fractalup > 0) { if (handle1 == 0) { handle1 = FileOpen(File_Name,FILE_CSV|FILE_WRITE,";"); //--- File opening if (handle1 > 0) { write = FileWrite(handle1,Erray[0,0]); //--- Writing to the file if (write <= 0) Print ("Failed writing to file handle1 ", ErrorDescription (GetLastError())); else Print ("Success writing to file handle1 with ",write," character written."); FileClose (handle1); handle1 = 0; //return; //--- exit start } else { Print ("Failed to open file handle 1 ", ErrorDescription (GetLastError())); } } } } //------------------------------------------------------------------------ { handle2 = FileOpen(File_Name,FILE_CSV|FILE_READ,";"); //File opening read = FileReadString(handle2); pastfractalup = StrToDouble(read); if (handle2 > 0) { FileClose(handle2); handle2 = 0; } Print ("Value from handle2 is ",read); }
int handle1,handle2,handle3,write; // File descriptor string File_Name="fractalup.csv"; // File name string File_Name2="fractaldown.csv"; string Erray[2,1]; // Array string read; Erray[0,0]=fractalup; Erray[1,0]=fractaldown; { if(fractalup>0) //store fractal to serve as entry Point { handle1=FileOpen(File_Name,FILE_CSV|FILE_WRITE,";"); //File opening FileWrite(handle1,Erray[0,0]); //Writing to the file if(write < 0) // If failed { FileClose(handle1); // File closing return; // Exit start() } FileClose(handle1); //Alert("The ",File_Name," file updated."); // Message } if (fractaldown>0) { handle2=FileOpen(File_Name2,FILE_CSV|FILE_WRITE,";"); //File opening FileWrite(handle2,Erray[1,0]); //Writing to the file if(write < 0) // If failed { FileClose(handle2); // File closing return; // Exit start() } FileClose(handle2); //Alert("The ",File_Name," file updated."); // Message } } //------------------------------------------------------------------------ { handle3=FileOpen(File_Name,FILE_CSV|FILE_READ,";"); //File opening read=FileReadString(handle3); pastfractalup=StrToDouble(read); FileClose(handle3); } { handle3=FileOpen(File_Name2,FILE_CSV|FILE_READ,";"); //File opening read=FileReadString(handle3); pastfractaldown=StrToDouble(read); FileClose(handle3); }hi can anyone show me how to simplify the code above?
- Free trading apps
- Over 8,000 signals for copying
- Economic news for exploring financial markets
You agree to website policy and terms of use
question are
1,is there any thing wrong with the code?
2.in the file_read section, what is the value read out, how to use it?
3,i should have 2 data,erray 0,0 and erray 1,0 ,how to show it out by comment?