Escrevendo para o arquivo em uma nova linha

 

Ajude-me a descobrir como escrever para um arquivo.

Aqui está a função:

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

Eu preciso que novos dados sejam escritos em uma nova linha em Excell, eu procurei em todo o código no fórum, incluindo o tutorial e a documentação, mas nenhum resultado :(((
 

Eu uso a função Kim - abrir arquivo - escrever uma linha - fechar o arquivo e depois dar a volta.

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

edição ao vivo...

 

Obrigado, funcionou.

Também corri o Kim's, mas o cabo era diferente = FileOpen("Summa.txt", FILE_CSV|FILE_WRITE, '\t');

 
Donatom:

Eu uso a função de Kim - abrir arquivo - escrever cadeia - fechar arquivo e depois ao redor.


não quero verificar, mas acho que FileFlush() https://docs.mql4.com/ru/files/FileFlush deve ajudar a não fechar o arquivo sempre, se FileFlush() corrigir a situação, é melhor abrir o arquivo no init(), e fechar no deinit(), eu fiz algo semelhante, parece acrescentar mais uma vez FileWrite(file_handle, ""); irá escrever uma nova linha - ou seja, cada FileWrite() é escrito com uma nova linha - verifique

ZS: Sempre escrevo gráficos offline não padronizados sem fechá-los, usando FileFlush()

 
int FileWriteArray( int handle, objectarray[], int start, int count)
A função escreve um array em um arquivo binário. Int, bool, datetime e matrizes de cores são escritas como inteiros de 4 bytes. As matrizes do tipo duplo são escritas como números de ponto flutuante de 8 bytes. As matrizes do tipo string são escritas linha por linha, com um sinal de fim de linha "\r\n" automaticamente adicionado após cada linha.

delimitador - Delimitador de caracteres para arquivos csv. Por default ';' é utilizado.
ou seja, NÃO os insira
S)+";"+Do

Você também pode fazer uma matriz vazia :) de 1 ou 2 elementos :) ou adicionar...
+DoubleToStr(AccountEquity(),1)+"\r\n";
      
FileWrite(path, Symbol(), TimeToStr(TimeCurrent(),TIME_DATE),DoubleToStr(AccountBalance(),1), DoubleToStr(AccountEquity(),1),TimeToStr(TimeCurrent(),TIME_SECONDS)+"\r\n");

 

Olá a todos. Estou tentando escrever cada novo pedido em uma nova linha, você poderia me dizer o que estou fazendo de errado? Resta apenas a última ordem em aberto.

nulo OnTick()

{
int i, digite;
lote duplo=0,sl=0,tp=0;
for(i=0; i<OrdersTotal(); i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol())
{
if(OrderType()==OP_BUY)
{
tipo=0;
lot=OrderLots();
sl=OrderStopLoss();
tp=OrderTakeProfit();
}
if(OrderType()==OP_SELL)
{
tipo=1;
lot=OrderLots();
sl=OrderStopLoss();
tp=OrderTakeProfit();
}
}
}
}

sl=NormalizeDouble(sl,Digits);
tp=NormalizarDuplo(tp,Dígitos);
//--- Abrir arquivo
int h=FileOpen("Copy.txt",FILE_WRITE";");
FileSeek(h, 0, SEEK_END);
FileWrite(h,_Symbol,type,sl,tp,lot);
FileClose(h); // fechar o arquivo

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

Olá a todos. Estou tentando escrever cada novo pedido em uma nova linha, você poderia me dizer o que estou fazendo de errado? Apenas o último aberto permanece escrito.


O arquivo continua sendo sobregravado por causa de bandeiras erradas. Você não deve abrir o arquivo apenas para escrever, mas também para ler. Então, não será recriado:

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

O arquivo está sendo constantemente sobrescrito devido a bandeiras incorretas. Você não deve abrir o arquivo apenas para escrever, mas também para ler. Então, não será recriado:

Muito obrigado. Muito obrigado!

A própria descrição da função contém estas informações, por alguma razão eu não sabia qual o caminho a seguir... Pensei que havia selecionado um tipo de arquivo errado, txt em vez de csv, mas acabou sendo muito simples. )))

 
Você pode me dizer como apagar um fio depois de lê-lo, existe alguma maneira simples de fazê-lo?
 
EfremovSergey:
Você pode me dizer como apagar uma linha depois de lê-la, existe alguma maneira simples de fazê-lo?

Na maioria dos casos, é melhor ler o arquivo inteiro, fazer as alterações necessárias nos dados em RAM e, em seguida, sobrescrever o arquivo inteiro. Isto é mais fácil do que mover os dados dentro do arquivo aberto.
Документация по MQL5: Файловые операции / FileOpen
Документация по MQL5: Файловые операции / FileOpen
  • www.mql5.com
[in]  Имя открываемого файла, может содержать подпапки. Если файл открывается для записи, то указанные подпапки будут созданы в случае их отсутствия. [in]  значение, используемое в качестве разделителя в txt или csv-файле. Если для csv-файла разделитель не указан, то по умолчанию используется символ табуляции. Если для txt-файла разделитель не...