エラー、バグ、質問 - ページ 327

 
mrProF:
一見すると、ファイル全体が str...に書き込まれているように見えます。
FILE_ANSIフラグを追加、デフォルトでunicodeを読み込むため:)
また、最後に空白行があるので、iは15になります。
MQL5のドキュメントによると、FileReadString関数は「ファイルポインタの現在の位置でファイルから文字列を読み取る」そうです。csv-fileから読み込む場合、現在の位置から最も近いセパレータまで、または文字列の終わりの符号まで読み込まれます".だから、「ファイル全体が書き込まれる」というのは反対です。FILE_ANSIを使用してみましたが、うまくいきません。最後の空行について:よくわからないのですが、どの行のことか説明してください。
 
DenisR:
MQL5のドキュメントに よると、FileReadString関数は「ファイルポインタの現在の位置から文字列を読み取る」そうです。csvファイルから読み込む場合、現在の位置から最も近いセパレータまで、またはテキスト文字列の終わりまで読み込まれます。だから、「ファイル全体が書き込まれる」というのは反対です。FILE_ANSIを使用してみましたが、うまくいきません。最後の空文字列について:よく理解できないのですが、どの文字列のことを指しているのか明確にしてください。

カンマを正しく見つけるかどうかです。エンコーディングが一致しないと、カンマを見ないことがあります。
デバッガで見てみます。
あなたのコードをコピーし、フラグを追加しました - すべてがOKです。
 
で、結果はというと、こんな感じです。
ansiがないとアブラカダブラと読み、カンマを見ないとファイルの末尾に飛んでいってしまうのです。
ansiでは、問題なく読み取れます。
添付ファイルをご覧ください。
ファイル:
 
-Alexey-:
MetaEditorでは、「ファイル内の関数一覧」ボタンで一覧が表示されます。下にスクロールすると、Rの文字までのクラスがありますが、Pで終わり、それ以上動きません(下向きの黒い三角形が非アクティブになります)。修正お願いします。

もっと詳しく知りたい。

ビルド、ファイル、解像度...

ChartObject.mqh ファイルで試したところ、上下にスクロールするようになりました。

 
mrProF:
で、結果はというと、こんな感じです。
ansiがないとアブラカダブラと読み、カンマを見ずにファイルの末尾に飛んでしまうのです。
ansiでは、問題なく読み取れます。
添付ファイルをご覧ください。
ansiからは(5 505 1009)と読み取れます。つまり、iは何らかの理由で0ではなく5になり、ファイルサイズは 以前と同じ505、FileTellは以前と同じ1009になります。MT4では、同じスクリプトが(15 505 505)と表示されます。
 
alexvd:

より詳細な情報が必要です。

ビルド、ファイル、解像度...

ChartObject.mqh ファイルで試したところ、上下にスクロールするようになりました。

Interesting:
そして、少なくともおおよそのリストサイズとは?リストの大きさには限界があるのかもしれませんが...。

-アレクセイ

ちょうど100行。


面白いですね

私のライブラリの1つ(110の関数)で実験したところ、リストに100から106まで表示されました(常に異なる数字、ただし110ではない)。

最後のビルドは、行数が100を超えると問題が発生するようです。ChartObject.mqhは、62行しかありません。解像度1680x1050。Windows7では、フォントスキームは拡大フォントです。

 
DenisR:
ansiからは(5 505 1009)と読み取れます。つまり、iは何らかの理由で0ではなく5になり、ファイルサイズは以前と同じ505、FileTellは以前と同じ1009になります。MT4では、同じスクリプトが(15 505 505)と表示されます。
うーん、私のは155091009ですね。


//+------------------------------------------------------------------+
//|                                                         test.mq5 |
//|                                                           mrProF |
//|                                                          http:// |
//+------------------------------------------------------------------+
#property copyright "mrProF"
#property link      "http://"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+


void OnStart()
  {int handle;
   ulong i, size;
   double _Ask, _Bid;
   string str;
      
   handle = FileOpen("test.csv",FILE_CSV|FILE_READ|FILE_ANSI,',');
   
   if (handle != INVALID_HANDLE)
     {
      size = FileSize(handle);
      
      for (i = 0; i < size; i++)
        {
         str = FileReadString(handle);
         _Ask = FileReadNumber(handle);
         _Bid = FileReadNumber(handle);
        
         if (FileIsEnding(handle))
           {
            Print(i," ",size," ",FileTell(handle));
            break;
           }
        }
     }   
      
   FileClose(handle);

   return;

  }
//+------------------------------------------------------------------+


一行ずつデバッグしてみてください。

 
mrProF:
うーん、155091009はあるんだけどなー。



私も最初は15 505 1009だったのですが、端末が最新版(408)にアップデートされ、5 505 1009になりました。しかし、いずれにせよ、ファイルの終了記号は、ファイル自体のサイズより大きくすることはできません。それが今の私の一番の関心事です。
 
alexvd:

より詳細な情報が必要です。

ビルド、ファイル、解像度...

ChartObject.mqh ファイルで試したところ、上下にスクロールするようになりました。

ビルド404と408、Win XP Prof SP3、3.0GHz CPUと3.0Gb RAMを搭載しています。

文字サイズや その他の設定(色を除く)は標準的なものです。

アクションは以下の通りです。

1.ライブラリやその他のプログラムモジュールを作成する。

2.100を超えなければならない手続きと関数のセットを生成する。私の場合、110でした(移行ライブラリをコケにした)。

具体的には、関数は110個で、約3310行の大きさのモジュールが出来上がりました。

3.モジュールをコンパイルする。

4.機能一覧に目を通すようにしています。

リストには100から106の関数が表示されました(再コンパイルするたびに関数の数や構成が異なります)。最初は106の機能名が表示され、だんだん数が減っていく。

同時に、110の機能すべてがリストに載ることはなかった。

追記

もうひとつ不思議だったのは、最初のコンパイルで何個の関数(50個以下であることは確かです)が出てこなくなり、2、3回再コンパイルしなければならなくなったことです。

リストの形成順序を変えて、例えばグループメニューの形で個々のクラスを割り当てるか(「詰め」クラスを別リストに表示)、Delphiのように別のマネージャーを組織するか(このような要望の議論はすでにフォーラムで行われています)。

 
-Alexey-:
alexvd:

より詳細な情報が必要です。

ビルド、ファイル、解像度...

ChartObject.mqh ファイルで試したところ、上下にスクロールするようになりました。

Bild lastは、行数が100を超えると問題が発生するようです。ChartObject.mqhは、62行しかありません。解像度1680x1050。Windows7では、フォントスキームは拡大フォントです。

はい、再現しました。

ありがとうございます、見てみましょう。