Escribir en el archivo en una nueva línea

 

Ayúdame a averiguar cómo escribir en un archivo.

Esta es la función:

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

Necesito que los nuevos datos se escriban en una nueva línea en Excell, he buscado en todo el código del foro, incluyendo el tutorial y la documentación, pero no hay resultado :(((
 

Utilizo la función Kim - abrir archivo - escribir una línea - cerrar el archivo y luego dar la vuelta.

//+------------------------------------------------------------------+
//| Запись строки в файл                                             |
//+------------------------------------------------------------------+
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);
        }
}
 

edición en vivo...

 

Gracias, ha funcionado.

También ejecuté el de Kim, pero la cadena era diferente handle = FileOpen("Summa.txt", FILE_CSV|FILE_WRITE, '\t');

 
Donatom:

Utilizo la función de Kim - abrir el archivo - escribir la cadena - cerrar el archivo y luego alrededor.


no quiero comprobarlo, pero creo que FileFlush() https://docs.mql4.com/ru/files/FileFlush debería ayudar a no cerrar el archivo cada vez, si FileFlush() arregla la situación, es mejor abrir el archivo en init(), y cerrarlo en deinit(), hice algo similar, parece que añadir una vez más FileWrite(file_handle, ""); escribirá una nueva línea - es decir, cada FileWrite() se escribe con una nueva línea - compruébalo

ZS: Siempre escribo gráficos fuera de línea no estándar sin cerrarlos, usando FileFlush()

 
int FileWriteArray( int handle, objectarray[], int start, int count)
La función escribe un array en un archivo binario. Las matrices Int, bool, datetime y color se escriben como enteros de 4 bytes. Las matrices de tipo double se escriben como números de punto flotante de 8 bytes. Las matrices de cadenas se escriben línea por línea, con un signo de fin de línea "\r\n" añadido automáticamente después de cada línea.

delimitador - Carácter delimitador para archivos csv. Por defecto se utiliza ';'.
es decir, NO los inserte
S)+";"+Do

También puedes hacer un array vacío :) de 1 o 2 elementos :) o añadir...
+DoubleToStr(AccountEquity(),1)+"\r\n";
      
FileWrite(path, Symbol(), TimeToStr(TimeCurrent(),TIME_DATE),DoubleToStr(AccountBalance(),1), DoubleToStr(AccountEquity(),1),TimeToStr(TimeCurrent(),TIME_SECONDS)+"\r\n");

 

Hola a todos. Estoy intentando escribir cada nueva orden en una nueva línea, ¿podríais decirme qué estoy haciendo mal? Sólo queda la última orden abierta.

void OnTick()

{
int i, tipo;
doble lote=0,sl=0,tp=0;
for(i=0; i<TotalPedidos(); i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol())
{
if(OrderType()==OP_BUY)
{
tipo=0;
lote=Los lotes del pedido();
sl=OrderStopLoss();
tp=OrderTakeProfit();
}
if(OrderType()==OP_SELL)
{
tipo=1;
lote=Los lotes del pedido();
sl=OrderStopLoss();
tp=OrderTakeProfit();
}
}
}
}

sl=NormalizarDoble(sl,Dígitos);
tp=NormalizarDoble(tp,Dígitos);
//--- Abrir archivo
int h=FileOpen("Copia.txt",FILE_WRITE,";");
FileSeek(h, 0, SEEK_END);
FileWrite(h,_Symbol,type,sl,tp,lot);
FileClose(h); // cerrar el archivo

Comentario("Tipo de pedido: ",type,
"Pedir lotes:",lotes,
"StopLoss:",sl,
"TakeProfit:",tp);
}
Купить советник или заказать?
Купить советник или заказать?
  • AM2
  • www.forexsystems.biz
Не секрет, что у каждого трейдера торгующего на рынке Форекс со временем складывается собственная стратегия со своими правилами и запретами. Причем не каждый сможет научиться торговать именно Вашей стратегией в прибыль, даже, если она дает Вам профит в течении продолжительного времени. У каждого свои эмоции, свой характер и свои запросы. Купить...
 
EfremovSergey:

Hola a todos. Estoy tratando de escribir cada nueva orden en una nueva línea, ¿podría decirme qué estoy haciendo mal? Sólo queda escrito el último que se ha abierto.


El archivo se sigue sobrescribiendo debido a banderas erróneas. No sólo debe abrir el archivo para escribir, sino también para leer. Entonces no se recreará:

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

El archivo se sobrescribe constantemente debido a banderas incorrectas. No sólo debe abrir el archivo para escribir, sino también para leer. Entonces no se recreará:

Muchas gracias. ¡Muchas gracias!

La propia descripción de la función contiene esta información, por alguna razón se me pasó por alto y ni siquiera sabía qué camino seguir... Pensé que había seleccionado un tipo de archivo equivocado, txt en lugar de csv, pero resultó ser muy sencillo. )))

 
¿Puedes decirme cómo borrar una cadena después de leerla, hay alguna forma sencilla de hacerlo?
 
EfremovSergey:
¿Puedes decirme cómo borrar una línea después de leerla, hay alguna forma sencilla de hacerlo?

En la mayoría de los casos, es mejor leer todo el archivo, hacer los cambios necesarios en los datos en la RAM y luego sobrescribir todo el archivo. Esto es más fácil que mover los datos dentro del archivo abierto.
Документация по MQL5: Файловые операции / FileOpen
Документация по MQL5: Файловые операции / FileOpen
  • www.mql5.com
[in]  Имя открываемого файла, может содержать подпапки. Если файл открывается для записи, то указанные подпапки будут созданы в случае их отсутствия. [in]  значение, используемое в качестве разделителя в txt или csv-файле. Если для csv-файла разделитель не указан, то по умолчанию используется символ табуляции. Если для txt-файла разделитель не...