ファイルへの書き込みを改行で行う

 

ファイルに書き込む 方法を教えてください。

これがその機能です。

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

Excelで新しいデータを新しい行に書き込む必要があります。フォーラムでチュートリアルやドキュメントを含むすべてのコードに目を通しましたが、結果は出ませんでした :(((
 

ファイルを開く→一行書く→ファイルを閉じるというキムさんの機能を使って、ぐるぐる回っています。

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

ライブエディット...

 

ありがとうございます、うまくいきました。

キムさんのも実行しましたが、文字列が違いました。 handle = FileOpen("Summa.txt",FILE_CSV|FILE_WRITE,'\t');

 
Donatom:

キムさんの関数、ファイルを開く→文字列を書く→ファイルを閉じる、あたりを使っています。


FileFlush() 解決するのであれば、init()でファイルを開き、deinit()で閉じるのが良いのではと思います。

ZS: 私はいつも非標準のオフライングラフィックを閉じずに、FileFlush()を使って書き込んでいます。

 
intFileWriteArray() int handle, オブジェクトarray[], int start, int count)
この関数は,バイナリファイルに配列を書き込みます.Int, bool, datetime, color 配列は4バイト整数で記述される。double 型の配列は 8 バイトの浮動小数点数として記述される。 文字列型 配列は一行ごとに記述され、各行の後には自動的に行末記号" \rn" が付加されます。

デリミタ - 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");

 

皆さん、こんにちは。新しい注文をそれぞれ新しい行に書こうとしているのですが、何が間違っているのか教えてください。最後に開いた注文だけが残ります。

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))
{
if(OrderSymbol()==Symbol())とする。
{
if(OrderType()==OP_BUY)
{
type=0とする。
lot=OrderLots()。
sl=OrderStopLoss()です。
tp=OrderTakeProfit()です。
}
if(オーダータイプ()==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:

フラグが正しくないため、ファイルが常に上書きされている。書き込み用だけでなく、読み出し用にもファイルを開く 必要があります。そうすれば、再作成されることはないでしょう。

ありがとうございました。ありがとうございました。

機能自体の説明にはこの情報が含まれているのですが、なぜか見逃してしまい、次に進むべき道もわからなくなってしまいました...。csvではなくtxtという間違ったファイル形式を選択したのかと思ったが、とても簡単なことだった。)))

 
文字列を読み込んだ後に削除する方法を教えてください、何か簡単な方法はありませんか?
 
EfremovSergey:
読み取った後に行を削除する方法を教えてください、何か簡単な方法はありませんか?

多くの場合、ファイル全体を読み込み、RAM上のデータに必要な変更を加えてから、ファイル全体を上書きする方がよいでしょう。開いているファイル 内でデータを移動するよりも簡単です。
Документация по MQL5: Файловые операции / FileOpen
Документация по MQL5: Файловые операции / FileOpen
  • www.mql5.com
[in]  Имя открываемого файла, может содержать подпапки. Если файл открывается для записи, то указанные подпапки будут созданы в случае их отсутствия. [in]  значение, используемое в качестве разделителя в txt или csv-файле. Если для csv-файла разделитель не указан, то по умолчанию используется символ табуляции. Если для txt-файла разделитель не...
理由: