MQL5におけるOOPに関する質問 - ページ 63

 
Igor Makanu:

は、Buy Moreに入れる。

イミフ、正しいことだ!

jsonは確立されたフォーマットで、C#とMQLで100%1対1のクラスを持つことができ、実行時にモデルをロードすることを整理するのに便利です - これまでのところ、この方向ではデッドロックがあります

と、あちこちにバイナリデータを渡す...。まあ、目新しさはないし、怠け者にしかできないけど)))


ZS: Pythonもjsonで問題なく動くようです。Metaquotesが新しいMT5の機能でpythonistに何を与えたのかは分かりませんが、単に過去のデータを送り出すだけなのでしょうか?- それは問題ではない。

怠け者のこと。まだ(jsonは)必要ない。

 

C#

namespace ConsoleApp4
{

    public class Rootobject
    {
        public Test test { get; set; }
        public int a { get; set; }
        public long b { get; set; }
    }

    public class Test
    {
        public int a { get; set; }
        public float b { get; set; }
        public string t { get; set; }
    }


    class Program
    {
        static void Main(string[] args)
        {
            var obj = new Rootobject { a = 555, b = long.MinValue, test = new Test { a = 10, b = 0.369 F, t = "Hi" } };
            string json = JsonSerializer.Serialize<Rootobject>(obj);
            Console.WriteLine(json);
            Console.ReadLine();
        }
    }
}

の結果です。

C#

{"test":{"a":10,"b":0.368999988,"t":"Hi"},"a":555,"b":-9223372036854775808}

MQLです。

{"test":{"a":10,"b":0.369,"t":"Hi"},"a":555,"b":-9223372036854775808}


間違いなくWILDERFUL!

;)

 

私の希望ですでに退屈しているかと思いますが、オブジェクトの配列が必要なのです

自分一人では、無理です(((;゚Д゚)))

そのような例が必要なのです。

class CJSon{
   string text;
public:
   CJSon():text(NULL){}
   CJSon* Push(string key,string value) {text+=COMMA+"\""+key+"\":\""+value+"\""; return &this;}
   CJSon* PushStruct(string key,string value) {text+=COMMA+"\""+key+"\":"+value; return &this;}
   CJSon* Push(string key,long value)   {text+=COMMA+"\""+key+"\":"+(string)value; return &this;}
   CJSon* Push(string key,double value) {text+=COMMA+"\""+key+"\":"+(string)value; return &this;}
   string Finish()   {return text+="}";}
};
#undef COMMA

class _CTest{
public:
   int a;
   double b;
   string t;
   _CTest(int _a,double _b,string _t):a(_a),b(_b),t(_t){}
   string JSon()  {return (CJSon()).VALUE(a).VALUE(b).VALUE(t).Finish();}
};

class CTest{
   _CTest test[5];
public:
   int a;
   long b;
public:
   CTest():a(555),b(LONG_MIN)
   { 
      for(int i=ArraySize(test)-1; i>=0; i--) 
         {
            test[i].a = i;
            test[i].b = (double)i/10.0;
            test[i].t = (string)(i*2); 
         }
   }
   string JSon() {return (CJSon()).STRUCT(test).VALUE(a).VALUE(b).Finish();}
};

という結果になるはずです。

{"test":[{"a":4,"b":0.4,"t":"8"},{"a":3,"b":0.3,"t":"6"},{"a":2,"b":0.2,"t":"4"},{"a":1,"b":0.1,"t":"2"},{"a":0,"b":0.0,"t":"0"}],"a":555,"b":-9223372036854775808}

 
Igor Makanu:

自分の希望はもう飽きられてるんじゃないかと思うけど、オブジェクトの配列が必要
自分、無理です((

教えてください。どこかで見落としているかもしれませんが、それでも、
既製のjsonシリアライズ/デシリアライズの ソリューションの何が問題なのでしょうか?

JSON Serialization and Deserialization (native MQL)
JSON Serialization and Deserialization (native MQL)
  • www.mql5.com
Сериализация и десериализация JSON-протокола. Портированный код со скоростной библиотеки С++. Практичный пример: авторизация на сайте и парсинг ответа Благодарности принимаются в виде примеров, кто как применяет MQL для работы с веб-ресурсами. Поделитесь своим опытом работы с JSON в MQL. В протокол добавлены функции Escape / Unescape...
 
Sergey Dzyublik:

もしかしたら、どこかで見落としているかもしれませんが、それでも、
すぐに使えるjsonシリアライズ/デシリアライズの ソリューションの何が問題なのか、教えてください。

KBソリューションでは、自分でjsonのオブジェクトフィールドを生成することができます。

Vladimir Simakov 氏の提案したソリューションにより、より便利になりました。

 
Igor Makanu:

KB のソリューションでは、json のオブジェクトフィールドを独立して生成する必要がある
@Vladimir Simakov が提案したソリューションでは、これがより便利に行われる。

自主制作という言葉について、かなり特殊な理解をしているようですね。

class _CTest{
public:
   int a;
   double b;
   string t;
   _CTest(int _a,double _b,string _t):a(_a),b(_b),t(_t){}
   string JSon()  {return (CJSon()).VALUE(a).VALUE(b).VALUE(t).Finish();}
};

どうやらタスクを解決してもらった方が便利なようで、その味をしめてしまったようです...。

 
Sergey Dzyublik:

自己形成」という言葉について、非常に特殊な理解をしているようですね。

どうやら、問題を解決してもらって味をしめたからこそ、その解決方法が便利なようだ...。

何があなたを駆り立てているのかを示唆するのは難しいです。あなたが助けたいと思えば助け、そうでなければスレッドを閉じて、あなたのビジネスを続けてください。

と、またまたフォーラムメンバーの個人的な特徴を論じようとしています...。結婚しなさい、シリ-ン」--やることがないときに、頭の上に乗ってくれる人がいる。


をポイントに。

角括弧をどこにつけるか考えているのですが、残念な結果になってしまいました。

#define ARRCOMMA (arrtext==NULL?"[":",")
...
CJSon* PushArray(string key,string value) {text+= COMMA + "\""+key+"\":"+ ARRCOMMA + value;  return &this;}

セレクションに飽きたら、もっと汚い手口で[]を突っ込みます )))

 
Igor Makanu:

動機は推し量れないが、助けたいなら助け、嫌ならスレを閉じて自分の仕事に専念したのだろう。

と、またまたフォーラム参加者の個人的な特徴を論じようとする...。一般的には、「結婚した方がいいですよ!」(S)-何もすることがない時に、頭を下げてくれる人が出てくるでしょう。


をポイントに。

角括弧をどこにつけるか考えているのですが、残念な結果になってしまいました。

セレクションに飽きたら、もっと汚い手口で[]を突っ込みます )))

#define  COMMA (text==NULL?"{":",")
#define  VALUE(dVal) Value(#dVal,dVal)
#define  STRUCT(dVal) Struct(#dVal,dVal)
#define  STRUCT_PTR(dVal) StructPtr(#dVal,dVal)
#define  ARRAY(dVal) Array(#dVal,dVal)
#define  ARRAY_STRUCT(dVal) ArrayStruct(#dVal,dVal)
#define  ARRAY_STRUCT_PTR(dVal) ArrayStructPtr(#dVal,dVal)

class CJSon{
   string text;
public:
   CJSon():text(NULL){}
   CJSon* Manual(string key,string _text) {text+=COMMA+"\""+key+"\":"+_text; return &this;}
   template<typename T>
   CJSon* Value(string key,T value) {text+=COMMA+"\""+key+"\":"+_Text(value); return &this;}
   template<typename T>
   CJSon* Struct(string key,T &value) {text+=COMMA+"\""+key+"\":"+value.JSon(); return &this;}
   template<typename T>
   CJSon* StructPtr(string key,T* value) {text+=COMMA+"\""+key+"\":"+(!CheckPointer(value)?"null":value.JSon()); return &this;}
   template<typename T>
   CJSon* Array(string key,T &value[]){
      text+=COMMA+"\""+key+"\":[";
      for (int i=0,count=ArraySize(value);i<count;text+=_Text(value[i++])+",");
      StringSetCharacter(text,StringLen(text)-1,']');
      return &this;}
   template<typename T>
   CJSon* ArrayStruct(string key,T &value[]){
      text+=COMMA+"\""+key+"\":[";
      for (int i=0,count=ArraySize(value);i<count;text+=value[i++].JSon()+",");
      StringSetCharacter(text,StringLen(text)-1,']');
      return &this;}
   template<typename T>
   CJSon* ArrayStructPtr(string key,T &value[]){
      text+=COMMA+"\""+key+"\":[";
      for (int i=0,count=ArraySize(value);i<count;++i) text+=(CheckPointer(value[i])==POINTER_INVALID?"null":value[i].JSon())+",");
      StringSetCharacter(text,StringLen(text)-1,']');
      return &this;}
   string Finish()   {return text+="}";}
private:
   string _Text(string value) {return "\""+value+"\"";}
   template<typename T>
   string _Text(T value) {return (string)value;}
};

#undef  COMMA

修正し、シリアライズ可能なオブジェクトへのポインタを同時に処理するようにしました。

PS.コドバザ」に入れなければならないようです))))

 
Vladimir Simakov:
class CTest{
   _CTest test[5];
public:
   int a;
   long b;
public:
   CTest():a(555),b(LONG_MIN)
   {
      for(int i=ArraySize(test)-1; i>=0; i--) 
         {
            test[i].a = i;
            test[i].b = (double)i/10.0;
            test[i].t = (string)(i*2); 
         }
      
   }
   
   string JSon() {return (CJSon()).ARRAY_STRUCT(test).VALUE(a).VALUE(b).Finish();}
};

void OnStart(){
   CTest test;
   Print(test.JSon());
 }

のようになります(改行は不要で、手で入れました)。

{"test":[
         {"a":0,"b":0.0,"t":"0"},
         {"a":1,"b":0.1,"t":"2"},
         {"a":2,"b":0.2,"t":"4"},
         {"a":3,"b":0.3,"t":"6"},
         {"a":4,"b":0.4,"t":"8"}],
         "a":555,"b":-9223372036854775808}

今はこんな感じです。

{"test":[
         "{" a":0," b":0.0," t":"0"}",
         "{" a":1," b":0.1," t":"2"}",
         "{" a":2," b":0.2," t":"4"}",
         "{" a":3," b":0.3," t":"6"}",
         "{" a":4," b":0.4," t":"8"}"],
         "a":555,"b":-9223372036854775808}
 
Vladimir Simakov:

PS.コドベース」に入れるしかないようです))))

もちろん、この1時間の間にどれだけ早く作ったのかという疑問はありますが......。そりゃあもう

編集したバージョンを確認 - OK、すべて正常に動作します。