Écriture dans le fichier sur une nouvelle ligne

 

Aidez-moi à comprendre comment écrire dans un fichier.

Voici la fonction :

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

J'ai besoin d'écrire de nouvelles données sur une nouvelle ligne dans Excell, j'ai parcouru tout le code sur le forum, y compris le tutoriel et la documentation, mais sans résultat :((((
 

J'utilise la fonction de Kim - ouvrir le fichier - écrire une ligne - fermer le fichier et ensuite faire le tour.

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

montage en direct...

 

Merci, ça a marché.

J'ai également exécuté celui de Kim, mais la chaîne était différente handle = FileOpen("Summa.txt", FILE_CSV|FILE_WRITE, '\t') ;

 
Donatom:

J'utilise la fonction de Kim - ouvrir le fichier - écrire la chaîne - fermer le fichier et ensuite autour.


je ne veux pas vérifier, mais je pense que FileFlush() https://docs.mql4.com/ru/files/FileFlush devrait aider à ne pas fermer le fichier à chaque fois, si FileFlush() corrige la situation, il est préférable d'ouvrir le fichier dans init(), et de le fermer dans deinit(), j'ai fait quelque chose de similaire, il semble qu'ajouter une fois de plus FileWrite(file_handle, "") ; écrira une nouvelle ligne - c'est-à-dire que chaque FileWrite() est écrit avec une nouvelle ligne - vérifiez-le

ZS : J'écris toujours les graphiques hors ligne non standard sans les fermer, en utilisant FileFlush()

 
int FileWriteArray( int handle, objectarray[], int start, int count)
La fonction écrit un tableau dans un fichier binaire. Les tableaux Int, bool, datetime et couleur sont écrits sous forme d'entiers de 4 octets. Les tableaux de type double sont écrits comme des nombres à virgule flottante de 8 octets. Les tableaux de type String sont écrits ligne par ligne, avec un signe de fin de ligne "\r\n" automatiquement ajouté après chaque ligne.

délimiteur - Caractère de délimitation pour les fichiers csv. Par défaut, ';' est utilisé.
c'est-à-dire qu'il ne faut PAS les insérer
S)+";"+Do

Vous pouvez aussi faire un tableau vide :) de 1 ou 2 éléments :) ou ajouter...
+DoubleToStr(AccountEquity(),1)+"\r\n";
      
FileWrite(path, Symbol(), TimeToStr(TimeCurrent(),TIME_DATE),DoubleToStr(AccountBalance(),1), DoubleToStr(AccountEquity(),1),TimeToStr(TimeCurrent(),TIME_SECONDS)+"\r\n");

 

Bonjour à tous. J'essaie d'écrire chaque nouvelle commande dans une nouvelle ligne, pourriez-vous me dire ce que je fais mal ? Il ne reste que le dernier ordre ouvert.

void OnTick()

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

sl=NormalizeDouble(sl,Digits) ;
tp=NormalizeDouble(tp,Digits) ;
//--- Ouvrir le fichier
int h=FileOpen("Copy.txt",FILE_WRITE, " ;") ;
FileSeek(h, 0, SEEK_END) ;
FileWrite(h,_Symbol,type,sl,tp,lot) ;
FileClose(h) ; // ferme le fichier

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

Bonjour à tous. J'essaie d'écrire chaque nouvelle commande dans une nouvelle ligne, pourriez-vous me dire ce que je fais mal ? Seul le dernier ouvert reste écrit.


Le fichier continue d'être écrasé à cause de mauvais drapeaux. Vous devez ouvrir le fichier non seulement pour l'écriture, mais aussi pour la lecture. Alors il ne sera pas recréé :

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

Le fichier est constamment écrasé à cause de drapeaux incorrects. Vous devez ouvrir le fichier non seulement pour l'écriture, mais aussi pour la lecture. Alors il ne sera pas recréé :

Merci beaucoup. Merci beaucoup !

La description de la fonction elle-même contient cette information, pour une raison quelconque, je l'ai manquée et je ne savais même pas quelle direction prendre... Je pensais avoir sélectionné un mauvais type de fichier, txt au lieu de csv, mais cela s'est avéré très simple. )))

 
Pouvez-vous me dire comment supprimer une chaîne de caractères après l'avoir lue, y a-t-il un moyen simple de le faire ?
 
EfremovSergey:
Pouvez-vous me dire comment supprimer une ligne après l'avoir lue, y a-t-il un moyen simple de le faire ?

Dans la plupart des cas, il est préférable de lire l'ensemble du fichier, d'apporter les modifications nécessaires aux données en RAM, puis d'écraser l'ensemble du fichier. C'est plus facile que de déplacer les données dans le fichier ouvert.
Документация по MQL5: Файловые операции / FileOpen
Документация по MQL5: Файловые операции / FileOpen
  • www.mql5.com
[in]  Имя открываемого файла, может содержать подпапки. Если файл открывается для записи, то указанные подпапки будут созданы в случае их отсутствия. [in]  значение, используемое в качестве разделителя в txt или csv-файле. Если для csv-файла разделитель не указан, то по умолчанию используется символ табуляции. Если для txt-файла разделитель не...
Raison: