OBJ_TEXTオブジェクトでテキストを複数行に出力することは可能ですか? - ページ 7

 
Реter Konow:
もちろんです。

また、私が戸惑ったことであなたを戸惑わせたい)))1つのリソースに複数の行を個別に渡して、リソースを読みながらそこから選択した行だけを読み出すことは可能でしょうか?

画像の場合はTextOut()で数行作成できますが、このようなリソースを読み込もうとするとうまくいきません。1行目のみ読むことができます。

 
Alexey Viktorov:

また、私が戸惑ったことであなたを戸惑わせたい)))1つのリソースにいくつかの別々の行を渡して、そこから選択した行だけを読み取ることは可能でしょうか?

画像の場合、TextOut()で数行作成できますが、このリソースを読み込もうとすると失敗します。1行目のみ読むことができます。

写真からテキストを保存したり、読んだりしようとしても意味がありません。リソースを使って上で説明したように文字列を書き、CharArrayToStringで取り出して 戻します。次に、文字列をデリミターで分割し、その中から正しいものを探す。(したがって、保存する前に、何らかの記号で文字列を部分文字列に分割してください)。
 
Реter Konow:
写真からテキストを保存したり、読んだりしようとしても意味がありません。リソースを使って、上で説明したように文字列を書き、CharArrayToStringで取り出して戻します。次に、文字列をデリミターで分割し、その中から正しいものを探す。(したがって、保存する前に、何らかの記号で文字列を部分文字列に分割してください)。

絵から読み取ろうという気にはなりませんでした。写真は数行の例として挙げただけです。

部分文字列を抜き出すのは簡単すぎる。私たちは安易な方法を求めてはいません :)))ありがとうございました。

 
Alexey Viktorov:

絵から読み取ろうという気にはなりませんでした。写真は数行の例として挙げただけです。

部分文字列を取り出すには、あまりにも簡単です。安易な方法を求めているわけではないのです)ありがとうございました。

すでにリソースにデータを保存し、それを取り出す方法を知っていれば、部分文字列を引き出すのはそれほど難しいことではありません。これ自体は簡単な作業です。まず文字列をリソースに保存し、そこから取り出してみてください。次に、文字列を部分文字列に分割して、正しいものを検索する関数を追加します。
 
Реter Konow:
データをリソースに保存して取り出す方法を既に知っていれば、部分文字列を取り出すのはそれほど難しいことではありません。それ自体は簡単な作業です。まず文字列をリソースに保存し、そこから取り出してみてください。次に、文字列を部分文字列に分割して、正しいものを検索する関数を追加します。

Peter ありがとうございます。私は数年前に弦楽器の扱い方を学びました。そして、リソースを保存して読む方法ですが、皆さんの協力で、昨日わかりました。ただ、頭の中で、やってみようかな...みたいな必死のメールが来て、どうしよう...メールが途中で迷子になり、思考停止してしまいました。

リソースを作成 する際の2次元配列と1次元配列の違いについて考えています。この件に関して、何か進展や考えはありますか?

 
Alexey Viktorov:

Peter ありがとうございます。私は数年前に弦楽器の扱い方を学びました。そして、リソースを保存して読む方法ですが、皆さんの協力で、昨日わかりました。ただ、頭の中で、やってみようかな...みたいな必死なメールが来て、でもどうしよう......メールが邪魔して、思考が迷子になってしまった。

そこで今、リソースを作成 するための2次元配列と1次元配列の違いについて考えているところです。この件に関して、何かご意見、ご感想はありますか?

正直なところ、リソースに2次元配列を格納したことはないんです。制約がないので、いつも一寸法師と一緒に仕事をしています。データを保存するには一次元の方が良いのですが、必ずしもそうである必要はないでしょう。どのようなデータで、どのような形式かによって異なります。2 次元配列は CharArrayToString および StringToCharArray 関数に送ることができないため、文字列保存には 1 次元配列のみを使用します。ですから、柔軟性を持たせるために、どのデータも1次元配列で保存する仕組みを開発することをお勧めします。しかし、同じ型の文字列でないデータには、2次元を使うようにするとよいでしょう。どんなものが出てくるか、楽しみですね。
 

以前のページを読んで、リソースから小さな文字列を1つだけ読み取るというタスクであることに気づきました。この文字列が64文字以下なら、ユニオンでごちゃごちゃやって、リソースにデータを保存する意味がないんです。 OBJPROP_TEXTの descriptionプロパティに必要な文字列を書き込むだけです。

ObjectSetString(chartID,label_name,OBJPROP_TEXT, "あなたの文字列");

そして、このように取り戻してください。

文字列 Str =ObjectGetString(chartID,label_name,OBJPROP_TEXT);


で、おしまいです))

 
Alexey Viktorov:

トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム

ライブラリ:TradeTransactions

fxsaber さん 2018.09.20 16:23

// Пример хранения/обмена данными через Ресурсы внутри Терминала
#include <fxsaber\TradeTransactions\ResourceData.mqh> // https://www.mql5.com/ru/code/22166

void OnStart()
{  
  const RESOURCEDATA<int> ResourceINT("::int"); // Ресурс для обмена int-ами. const - как доказательство, что ничего не пишется в объект класса
  
  int ArrayINT[] = {1, 2, 3};
  int Num = 5;
  
  ResourceINT = ArrayINT;  // Ресурс хранит массив.
  ResourceINT += Num;      // Добавили в ресурс еще значение.
  ResourceINT += ArrayINT; // Добавили массив.
  
  int ArrayINT2[];  
  ResourceINT.Get(ArrayINT2); // Считали данные из ресурса.
  ArrayPrint(ArrayINT2);      // Вывели: 1 2 3 5 1 2 3

  ResourceINT.Free();                // Удалили данные из ресурса
  Print(ResourceINT.Get(ArrayINT2)); // Убедились, что данных нет: 0

  const RESOURCEDATA<MqlTick> ResourceTicks("::Ticks"); // Ресурс для обмена тиками. const - как доказательство, что ничего не пишется в объект класса
  MqlTick Tick;
  
  if (SymbolInfoTick(_Symbol, Tick))
    for (int i = 0; i < 3; i++)
      ResourceTicks += Tick; // Добавили в ресурс тики

  MqlTick Ticks[];
  ResourceTicks.Get(Ticks); // Считали данные из ресурса.
  ArrayPrint(Ticks);        // Вывели.
  
  // Это полное имя ресурса для обращения из другой программы
  const string NameOut = StringSubstr(MQLInfoString(MQL_PROGRAM_PATH), StringLen(TerminalInfoString(TERMINAL_PATH)) + 5) + "::Ticks";  
  Print(NameOut); // Вывели полное имя ресурса.
  
  const RESOURCEDATA<MqlTick> Resource(NameOut); // Ресурс для доступа к данным (read-only) из другой программы
  
  MqlTick TicksOut[];
  Resource.Get(TicksOut); // Считали данные из ресурса.
  ArrayPrint(TicksOut);   // Вывели.
  
  Resource.Free();   // Не получится повлиять на данные read-only-ресурса.
  Print(_LastError); // ERR_INVALID_PARAMETER - Ошибочный параметр при вызове системной функции.
}

 
Реter Konow:

以前のページを読んで、リソースから小さな文字列を1つだけ読み取るというタスクであることに気づきました。この文字列が64文字以下なら、ユニオンでごちゃごちゃやって、リソースにデータを保存する意味がないんです。 OBJPROP_TEXTの descriptionプロパティに必要な文字列を書き込むだけです。

ObjectSetString(chartID,label_name,OBJPROP_TEXT, "あなたの文字列");

そして、このように取り戻してください。

文字列 Str = ObjectGetString(chartID,label_name,OBJPROP_TEXT);


で、おしまいです))

そうではありません。課題は、数行の情報を出力することでした。私見ですが...を表示させたかっただけなんです。その中の一行には日付が入っている。この日付はわかりやすくするためだけでなく、再稼働後もプログラムで使用する必要があります。どうにかして保存しなければならないことが判明したのです。ここからが本番、安易に手を出すのはやめよう。日付を保存する方法の1つはグラフィカルなオブジェクトを使うことなので、同じリソースを使うのはいかがでしょう。MTリソースは再起動すると読めるようになりますが、コンピュータの再起動後は未確認です。リソースとユニットを把握したことが大きいですね。気がつくと、頭の中に必死のメールが届いていた。すべて削除したら、有益な仕事を続けるよ。

 
Alexey Viktorov:

そうでもないんです。課題は、数行の情報を出力することでした。私見ですが.というのは、キャンバスと一緒に展示することを想定してのことです。その中の一行には日付が入っている。この日付はわかりやすくするためだけでなく、再稼働後もプログラムで使用する必要があります。どうにかして保存しなければならないことが判明したのです。ここからが本番、安易に手を出すのはやめよう。日付を保存する方法の1つはグラフィカルなオブジェクトを使うことなので、同じリソースを使うのはいかがでしょう。MTリソースは再起動すると読めるようになりますが、コンピュータの再起動後は未確認です。リソースとユニットを把握したことが大きいですね。気がつくと、頭の中に必死のメールが届いていた。すべて削除したら、有益な仕事を続けるよ。

よかったです。そして、資源や組合を使いこなし続ける。あらゆるデータを高速に書き込んで保存するだけでなく、異なるプログラム間でデータをリアルタイムに共有し、ディスクに負荷をかけない汎用的な方法を提供します。