在新的一行写到文件中

 

帮助我弄清楚如何写到一个文件

这里有一个功能。

if(DayOfWeek()==day){ //Print("Woking . . .");
  ac=Symbol(); 
  ss1 = ac+day+";"+TimeToStr(TimeCurrent(),TIME_MINUTES)+";"+DoubleToStr(AccountBalance(),1)+";"+DoubleToStr(AccountEquity(),1)+"\n";
   WriteFile (path, ss1);
   day++;if(day==6)day=1;
}

........


//+------------------------------------------------------------------+
void WriteFile(string path,string buffer){
int count=StringLen(buffer),result,handle=_lopen(path,1); 
if(handle<0){ handle=_lcreat(path,0);
if(handle<0){ Print ("Ошибка создания файла ",path);return;}
result = _lclose (handle); }
handle=_lopen (path,1);if(handle<0){Print("Ошибка открытия файла ",path);return;}
result=_llseek(handle,0,0);if(result<0) {Print("Ошибка установки указателя"); return; }
buffer = buffer + "\n";
result=_lwrite(handle,buffer,count); if(result<0)Print("Ошибка записи в файл ",path," ",count," байт");
//result=_lclose (handle); if(result<0)Print("Ошибка закрытия файла ",path);
  }

我需要在Excell中把新的数据写在新的一行,我已经看了论坛上所有的代码,包括教程和文档,但是没有结果 :( ( )
 

我使用Kim功能--打开文件--写一行--关闭文件,然后再绕过去。

//+------------------------------------------------------------------+
//| Запись строки в файл                                             |
//+------------------------------------------------------------------+
void WritingLineInFile(string FileName, string text)
{
  int file_handle=FileOpen(FileName, FILE_READ|FILE_WRITE, " ");

        if (file_handle>0)
        {
                FileSeek(file_handle, 0, SEEK_END);
                FileWrite(file_handle, text);
                FileClose(file_handle);
        }
}
 

现场编辑...

 

谢谢,它起作用了。

我也运行了Kim的,但字符串是不同的 handle = FileOpen("Summa.txt",FILE_CSV|FILE_WRITE,'\t')。

 
Donatom:

我使用Kim的函数--打开文件--写字符串--关闭文件,然后绕开。


我不想检查,但我认为FileFlush()https://docs.mql4.com/ru/files/FileFlush 应该有助于不要每次都关闭文件,如果FileFlush()能解决这个问题,最好是在init()中打开文件,在deinit()中关闭,我做了类似的事情,似乎再次添加FileWrite(file_handle, ""); 会写一个新行 - 即每个FileWrite() 都写一个新行 - 查看一下

ZS: 我总是写非标准的离线图形而不关闭它们,使用FileFlush()。

 
intFileWriteArray( int handle, objectarray[], int start, int count)
该函数将一个数组写到一个二进制文件中。Int, bool, datetime和color数组被写成4字节的整数。double类型的数组被写成8字节的浮点数。 字符串类型的 数组是逐行写入的,每行后面都会自动加上行尾符号"\r\n"。

分隔符 - csv文件的分隔符。默认情况下,使用';'。
即,不要插入它们
S)+";"+Do

你也可以做一个1或2个元素的空数组:)或添加...
+DoubleToStr(AccountEquity(),1)+"\r\n";
      
FileWrite(path, Symbol(), TimeToStr(TimeCurrent(),TIME_DATE),DoubleToStr(AccountBalance(),1), DoubleToStr(AccountEquity(),1),TimeToStr(TimeCurrent(),TIME_SECONDS)+"\r\n");

 

大家好。我正在尝试将每个新订单写在一个新行中,你能告诉我我做错了什么吗?只剩下最后一个开放的订单。

空白的OnTick()

{
int i, type;
双层lot=0,sl=0,tp=0。
for(i=0; i<OrdersTotal(); i++)
{
如果(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
如果(OrderSymbol()==Symbol())
{
如果(OrderType()==OP_BUY)
{
type=0。
lot=OrderLots()。
sl=OrderStopLoss()。
tp=OrderTakeProfit()。
}
如果(OrderType()==OP_SELL)
{
type=1;
lot=OrderLots()。
sl=OrderStopLoss()。
tp=OrderTakeProfit()。
}
}
}
}

sl=NormalizeDouble(sl,Digits);
tp=NormalizeDouble(tp,Digits)。
//---- 打开文件
int h=FileOpen("Copy.txt",FILE_WRITE,"; ")。
FileSeek(h, 0, SEEK_END)。
FileWrite(h,_Symbol,type,sl,tp,lot)。
FileClose(h); // 关闭文件。

Comment("\n Order Type: " ,type,
"订购批次:",批次。
"StopLoss:",sl,
"TakeProfit:",tp)。
}
Купить советник или заказать?
Купить советник или заказать?
  • AM2
  • www.forexsystems.biz
Не секрет, что у каждого трейдера торгующего на рынке Форекс со временем складывается собственная стратегия со своими правилами и запретами. Причем не каждый сможет научиться торговать именно Вашей стратегией в прибыль, даже, если она дает Вам профит в течении продолжительного времени. У каждого свои эмоции, свой характер и свои запросы. Купить...
 
EfremovSergey:

大家好。我正试图将每个新订单写在一个新行中,你能告诉我我做错了什么吗?只有最后打开的那份仍在书写。


由于标记错误,文件不断被覆盖。你不仅要打开文件 进行书写,也要打开文件进行阅读。那么它就不会被重新创建。

 int h=FileOpen("Copy.txt",FILE_WRITE | FILE_READ,";");
 
Ihor Herasko:

由于标记不正确,该文件不断被覆盖。你不仅要打开文件 进行书写,也要打开文件进行阅读。那么它就不会被重新创建。

非常感谢你。非常感谢您!

函数的描述本身就包含了这些信息,由于某些原因,我错过了,甚至不知道接下来该走哪条路......我以为我选择了错误的文件类型,是txt而不是csv,但结果发现非常简单。)))

 
你能告诉我如何在读完一个字符串后将其删除,有什么简单的方法可以做到吗?
 
EfremovSergey:
你能告诉我如何在阅读后删除一行吗,有什么简单的方法吗?

在大多数情况下,最好是读取整个文件,对RAM中的数据做必要的修改,然后再覆盖整个文件。这比在打开的文件 内移动数据更容易。
Документация по MQL5: Файловые операции / FileOpen
Документация по MQL5: Файловые операции / FileOpen
  • www.mql5.com
[in]  Имя открываемого файла, может содержать подпапки. Если файл открывается для записи, то указанные подпапки будут созданы в случае их отсутствия. [in]  значение, используемое в качестве разделителя в txt или csv-файле. Если для csv-файла разделитель не указан, то по умолчанию используется символ табуляции. Если для txt-файла разделитель не...
原因: