ファイルへの書き込みを改行で行う - ページ 7

 
EfremovSergey:

忙しい」フラッグ(先着順)とほぼ同じで、ただ何倍も複雑ですが、アイデアは面白いです、気に入りました、ありがとう。

おそらく、共有編集FILE_SHARE_WRITEを 無効にして、読み込みのみFILE_READを開く人は読み込み、読み込みと書き込みFILE_READ|FILE_WRITEを開く人はエラーを出してファイルを開き直すようにした方が簡単でしょう。この方が簡単かもしれませんね。

 
EfremovSergey:

FileClose保存の意味がよくわからないのですが。

ファイルを閉じる ときだけでなく、変更した内容もディスクに保存されるということです。

 
string    sep=";";                                                  // знак разделителя
ushort    usep=StringGetCharacter(sep,0);                           // код знака разделителя
string    arr[];                                                    // массив данных для открытия ордера
int       h=0;                                                      // handle_1
int       h1=0;                                                     // handle_2

int OnInit()
  
  {

   EventSetMillisecondTimer(3000);

   return(INIT_SUCCEEDED);
  }

void OnDeinit(const int reason)

  {
   EventKillTimer();
  }

void OnTimer()

  {

   h=FileOpen("Copy.txt",FILE_READ|FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_TXT|FILE_COMMON,";");   // open файл

   FileSeek(h,0,SEEK_SET);                      // перевод курсора в начало файла

   while(FileIsEnding(h)==false)               // построчное чтение до конца файла

     {

      string    s=FileReadString(h);                                    // чтение строки

      StringSplit(s,usep,arr);                                        // перенос подстрок в массив

      // открытие ордера с данными из массива

      OrderSend(arr[0],StrToInteger(arr[1]),StrToDouble(arr[2]),StrToDouble(arr[3]),100,0,0);

      if(FileIsEnding(h)==false)                                  // промежуточная проверка

         continue;                                               // возврат в начало по условию if

      h1=FileOpen("Copy.txt",FILE_WRITE|FILE_SHARE_WRITE|FILE_SHARE_READ|FILE_TXT|FILE_COMMON,";");  // очистка файла

      FileClose(h1);                                                   // закрытие handle_2

     }

   FileClose(h);                                                     // закрытие handle_1

   Comment ("\n H: ", h, "\n H1: ", h1);                            // вывод хэнделов на экран

  }

読み込み側では、すべてのデータを抽出した後、ファイルを閉じる ことなく空にできるフラグがあります。

書き込み側では、他のExpert Advisorによって既に開かれているファイルを開くことを許可しないフラグが設定されています。

//--- Открываем файл

      int h1=FileOpen("Copy.txt",FILE_READ|FILE_WRITE|FILE_TXT|FILE_COMMON,";");

      FileSeek(h1, 0, SEEK_END);

      FileWrite(h1,Symbol(),OP_BUYSTOP,OrderLots()*Koof,OrderStopLoss(),Slippage,0,0,IntegerToString(OrderTicket()));

      FileClose(h1);
 
// закрываем файл

このコードはあくまで例であり、ハンドルやチケットの処理などのチェック機能は不足していますが、希望する結果に近いものです。

皆さん、本当にありがとうございました。また、情報や役に立つヒントをたくさんありがとうございました。