从文件MQL4删除行

时间:2019-05-14 19:29:37

标签: file csv delete-row mql4

我将我的EA完成的所有交易保存到CSV文件中。当EA关闭交易时,我必须在文件中特定行的末尾添加字符串“ Book Profit”。 例如: 以下是打开交易时文件中保存的行 “购买GBPJPY 146.28 145.15”,我想在上一行的末尾添加字符串“ Book Profit”并将其保存到文件中。 保存后行应该看起来像 “买入GBPJPY 146.28 145.15账面利润”

int file_handle_dtf=FileOpen("MyTrades.CSV",FILE_READ|FILE_WRITE|FILE_CSV);
   if(file_handle_dtf!=INVALID_HANDLE){
      while(!FileIsEnding(file_handle_dtf)){

         str_size1=FileReadInteger(file_handle_dtf,INT_VALUE);
         //--- read the string

         str1=FileReadString(file_handle_dtf,str_size1);
         strBP=StringConcatenate(str1,",Book Profit");
         FileWriteString(file_handle_dtf,strBP+"\n");
         }

      }

此代码仅覆盖文件,不可读

2 个答案:

答案 0 :(得分:0)

在写入文件之前先寻找文件的结尾

if(FileSeek(file_handle_dtf,0,SEEK_END)) {    将文件编写代码放在这里 }

答案 1 :(得分:0)

对以下四个参数(购买,英镑/日元,146.28、145.15)使用以下功能:

void func_replaceStringInCSV(string _order,string _symbol,string _SL,string _TP)
 {
  int handle=FileOpen("MyTrades.CSV",FILE_READ|FILE_WRITE|FILE_CSV);
  if(handle!=INVALID_HANDLE)
    {
     while(!FileIsEnding(handle))
       {
        int lineStart=(int)FileTell(handle);
        string order=FileReadString( handle);
        if(FileIsLineEnding(handle))continue;
        string symbol=FileReadString(handle);
        if(FileIsLineEnding(handle))continue;
        string SL=FileReadString(handle);
        if(FileIsLineEnding(handle))continue;
        string TP=FileReadString(handle);
        if(FileIsLineEnding(handle))
          {
            if(StringConcatenate(order,symbol,SL,TP)==
            StringConcatenate(_order,_symbol,_SL,_TP))
             {
              string blankSpace="";
              int lineLen=StringLen(StringConcatenate(order,symbol,SL,TP))+3;
              FileSeek(handle,lineStart,SEEK_SET);
              for(int l=0;l<=lineLen;l++)
                 blankSpace+=" ";
              FileWrite(handle,order,symbol,SL,TP,"Book Profit");
              FileFlush(handle);
             }
          }
       }
    }
 }