Yeni bir satırda bir dosyaya yazma

 

Dosyaya yazma konusunda yardım.

İşte fonksiyon:

 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'deki yeni bir satırdan yazılacak, öğretici ve belgeler de dahil olmak üzere forumdaki tüm kodları karıştıracak yeni verilere ihtiyacım var, ancak sonuç sıfır :(((
 

Kimov işlevini kullanıyorum - dosyayı açıyoruz - satırı yazıyoruz - dosyayı kapatıyoruz ve sonra bir daire içinde.

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

canlı edit...

 

teşekkürler, işe yaradı.

Kimovskaya'yı da sürdüm, ancak hat farklıydı tutamaç = FileOpen("Summa.txt", FILE_CSV |FILE_WRITE, '\t' );

 
Donatom :

Kimov işlevini kullanıyorum - dosyayı açıyoruz - satırı yazıyoruz - dosyayı kapatıyoruz ve sonra bir daire içinde.


Kontrol etmek istemiyorum ama bence FileFlush() https://docs.mql4.com/en/files/FileFlush , FileFlush() durumu düzeltirse dosyayı her seferinde kapatmamaya yardımcı olur, o zaman daha iyi dosyayı init() içinde açmak ve deinit() içinde kapatmak için benzer bir şey yaptı, tekrar eklemek gibi görünüyor FileWrite(file_handle, ""); yeni bir satır yazacak - yani her FileWrite() yeni bir satırdan yazılır - kontrol etmeniz gerekir

Not: FileFlush () kullanarak sürekli kapanmadan yazılan standart dışı çevrimdışı grafiklerim var.

 
int FileWriteArray ( int tanıtıcı, nesne dizisi[] , int başlangıç, int sayısı)
İşlev, bir ikili dosyaya bir dizi yazar. int, bool, datetime ve color türündeki diziler, öğe bazında 4 baytlık tamsayılar olarak yazılır. Çift diziler, eleman eleman 8 baytlık kayan nokta sayıları olarak yazılır. Dize türündeki diziler satır satır yazılır, her satırdan sonra satır sonlandırıcı "\r\n" otomatik olarak eklenir.

sınırlayıcı - csv dosyaları için sınırlayıcı karakter. Varsayılan karakter ';'.
onlar. onları dahil ETMEYİN
S)+ ";" +Do

1-2 elemandan :) boş bir dizi de yapabilirsiniz :) veya hepsini aynı şekilde ekleyebilirsiniz ...
+DoubleToStr(AccountEquity(), 1 )+ "\r \n" ;
      
FileWrite(path, Symbol (), TimeToStr(TimeCurrent(),TIME_DATE),DoubleToStr(AccountBalance(), 1 ),DoubleToStr(AccountEquity(), 1 ),TimeToStr(TimeCurrent(),TIME_SECONDS)+ "\r \n" );

 

Merhaba. Her yeni siparişi yeni bir satıra yazmaya çalışıyorum, bana neyi yanlış yaptığımı söyle? Yalnızca son açılan kayıtlı kalır.

geçersiz OnTick()

{
int i, tür;
çift lot=0,sl=0,tp=0;
for(i=0; i<SiparişToplam(); i++)
{
if(Sipariş Seçimi(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol())
{
if(OrderType()==OP_BUY)
{
tip=0;
lot=SiparişLots();
sl=SiparişStopLoss();
tp=OrderTakeProfit();
}
if(OrderType()==OP_SEL)
{
tip=1;
lot=SiparişLots();
sl=SiparişStopLoss();
tp=OrderTakeProfit();
}
}
}
}

sl=NormalizeÇift(sl, Rakamlar);
tp=NormalizeÇift(tp,Rakamlar);
//--- Dosyayı aç
int h=FileOpen("Kopyala.txt", FILE_WRITE ,";");
FileSeek(h, 0, SEEK_END);
FileWrite(h,_Symbol,type,sl,tp,lot);
DosyaKapat(h); // dosyayı kapat

Comment("\n Sipariş Tipi: ",tür,
"\n Sipariş Lotları: ",lot,
"\n Kaybı Durdur: ",sl,
"\n Kâr Al: ",tp);
}
Купить советник или заказать?
Купить советник или заказать?
  • AM2
  • www.forexsystems.biz
Не секрет, что у каждого трейдера торгующего на рынке Форекс со временем складывается собственная стратегия со своими правилами и запретами. Причем не каждый сможет научиться торговать именно Вашей стратегией в прибыль, даже, если она дает Вам профит в течении продолжительного времени. У каждого свои эмоции, свой характер и свои запросы. Купить...
 
EfremovSergey :

Merhaba. Her yeni siparişi yeni bir satıra yazmaya çalışıyorum, bana neyi yanlış yaptığımı söyle? Yalnızca son açılan kayıtlı kalır.


Yanlış bayraklar nedeniyle dosyanın üzerine sürekli yazılıyor. Dosyayı sadece yazmak için değil, okumak için de açmanız gerekiyor. O zaman yeniden oluşturulmayacak:

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

Yanlış bayraklar nedeniyle dosyanın üzerine sürekli yazılıyor. Dosyayı sadece yazmak için değil, okumak için de açmanız gerekiyor. O zaman yeniden oluşturulmayacak:

Çok teşekkürler. Çok teşekkürler!

İşlevin açıklaması bu bilgiyi içeriyor, nedense onu gözden kaçırdım ve hangi yolu daha fazla kazacağımı bile bilmiyordum ... csv yerine yanlış dosya türünü, txt'yi seçtiğimi düşünmeye başladım, ama her şeyin basit olduğu ortaya çıkıyor. )))

 
Lütfen bana bir satırı okuduktan sonra nasıl silebileceğimi söyle, bu işlemi yapmanın basit bir yolu var mı?
 
EfremovSergey :
Lütfen bana bir satırı okuduktan sonra nasıl silebileceğimi söyle, bu işlemi yapmanın basit bir yolu var mı?

Çoğu durumda, tüm dosyayı okumak, RAM'deki verilerde gerekli değişiklikleri yapmak ve ardından tüm dosyanın üzerine yazmak daha iyidir. Bu, verileri bir open dosyası içinde taşımaktan daha kolaydır.
Документация по MQL5: Файловые операции / FileOpen
Документация по MQL5: Файловые операции / FileOpen
  • www.mql5.com
[in]  Имя открываемого файла, может содержать подпапки. Если файл открывается для записи, то указанные подпапки будут созданы в случае их отсутствия. [in]  значение, используемое в качестве разделителя в txt или csv-файле. Если для csv-файла разделитель не указан, то по умолчанию используется символ табуляции. Если для txt-файла разделитель не...