エラー、バグ、質問 - ページ 2461 1...245424552456245724582459246024612462246324642465246624672468...3185 新しいコメント Sergey Dzyublik 2019.05.15 11:05 #24601 fxsaber:この点について、詳しく教えてください。以下は私の主観です、どこか間違っていたらご指導いただければ幸いです。 StringLenは、文字列中の最初のNULL文字(0x0000)までO(n)で動作していましたが、現在はO(1)で動作しています。文字列の長さは StringSetCharacter(str, pos, 0x00) で常に切り捨てることができたが、何らかの理由で StringSetLength が導入されたのである。 おそらく、文字列を扱う際のコードの高速化という課題が解決されたのだろう。 コードの高速化という課題は解決され、関数の半分が文字列中のNULL文字を処理し、残りの半分が処理しないことを誰も気にしなくなりました。 #define PRINT(x) Print(#x, ":", string(x)) void OnStart(){ string str = "123456789"; PRINT(str); PRINT(StringLen(str)); PRINT(StringSetCharacter(str, 7, 0x00)); PRINT(StringLen(str)); str += "\x00" + str; PRINT(StringLen(str)); str += str; PRINT(str); PRINT(StringLen(str)); ushort array[]; PRINT(StringToShortArray(str, array)); ArrayPrint(array); PRINT(StringLen(str)); PRINT(StringLen(ShortArrayToString(array))); PRINT(StringLen(ShortArrayToString(array, 0, StringLen(str)))); } その結果 2019.05.15 14:02:11.895 StringFormat_1 (EURUSD,H1) str:123456789 2019.05.15 14:02:11.895 StringFormat_1 (EURUSD,H1) StringLen(str):9 2019.05.15 14:02:11.895 StringFormat_1 (EURUSD,H1) StringSetCharacter(str,7,0x00):true 2019.05.15 14:02:11.895 StringFormat_1 (EURUSD,H1) StringLen(str):7 2019.05.15 14:02:11.895 StringFormat_1 (EURUSD,H1) StringLen(str):15 2019.05.15 14:02:11.895 StringFormat_1 (EURUSD,H1) str:1234567 2019.05.15 14:02:11.895 StringFormat_1 (EURUSD,H1) StringLen(str):30 2019.05.15 14:02:11.895 StringFormat_1 (EURUSD,H1) StringToShortArray(str,array):31 2019.05.15 14:02:11.895 StringFormat_1 (EURUSD,H1) 49 50 51 52 53 54 55 0 49 50 51 52 53 54 55 49 50 51 52 53 54 55 0 49 50 51 52 53 54 55 0 2019.05.15 14:02:11.895 StringFormat_1 (EURUSD,H1) StringLen(str):30 2019.05.15 14:02:11.895 StringFormat_1 (EURUSD,H1) StringLen(ShortArrayToString(array)):7 2019.05.15 14:02:11.895 StringFormat_1 (EURUSD,H1) StringLen(ShortArrayToString(array,0,StringLen(str))):7 Artyom Trishkin 2019.05.15 11:16 #24602 Sergey Dzyublik:以下は私の主観です、どこか間違っていたらご指導いただければ幸いです。 StringLenは、文字列中の最初のNULL文字(0x0000)までO(n)で動作していましたが、現在はO(1)で動作しています。文字列の長さは StringSetCharacter(str, pos, 0x00) で常に切り捨てることができたが、何らかの理由で StringSetLength が導入されたのである。 おそらく、文字列を扱う際のコードの高速化という課題が解決されたのだろう。 コードの高速化という課題は解決され、関数の半分が文字列中のNULL文字を処理し、残りの半分が処理しないことを誰も気にしなくなりました。 その結果 感情を抑えてください。今度汚い言葉を使ったら、出入り禁止にしないとね~ここは居酒屋じゃないんだから。パブで悪口を言うのはもう流行らないしね。 A100 2019.05.15 11:45 #24603 Sergey Dzyublik:StringLenは、文字列の最初のNULL文字(0x0000)までO(n)で動作していましたが、現在はO(1)で動作しています。 ただ、部分的にバグが修正されています. なんでやねん私の記憶では、StringLenは常に正しく動作していました(少なくともx32では)。 A100 2019.05.15 11:53 #24604 Sergey Dzyublik: 開発者の皆様へ。 デフォルトの代入演算子(コピーコンストラクタ)に強制コード生成を指定する機能を追加してください。ちょっと複雑なんです。デフォルトのコンストラクタの類型を使うのが簡単です。 1) あらゆる代入演算 子がデフォルトの代入演算子を上書きする。 2) あらゆるコピー演算子がデフォルトのコピー演算子を上書きする。 Sergey Dzyublik 2019.05.15 12:02 #24605 A100: 部分的にミスを修正しただけ. なんでやねんMQLはNULL文字を含む文字列を扱う際に一貫した考えを持たないため、これが問題になっています。 例えば、StringToShortArrayは文字列中のNULL文字に対応していますが、逆関数のShortArrayToStringは対応していません...。 その結果、特定の課題を解決することよりも、バグを発見したり、回避策を探したりすることに多くの時間が費やされてしまうのです。 Sergey Dzyublik 2019.05.15 12:05 #24606 A100:ちょっと複雑なんです。デフォルトのコンストラクタの類型を使うのが簡単です。 1) あらゆる代入演算 子がデフォルトの代入演算子を上書きする。 2)任意のコピー演算子は、デフォルトのコピー演算子をキャンセルします。アンドゥはいらない、逆に強制世代が必要だ。 MQLには複雑な型のディープコピーを行う機能はなく、代入演算子やコピーコンストラクタではデフォルトで実装されています。 A100 2019.05.15 12:08 #24607 Sergey Dzyublik:MQLでは、NULL文字を含む文字列を扱う際の一貫した考え方がないため、これが問題になっています。 例えば、StringToShortArrayは文字列中のNULL文字に対応していますが、その逆関数のShortArrayToStringは対応していません...。一方ではイエス、他方では「or until terminal 0 is met」とドキュメントに 明示されています。 TheXpert 2019.05.15 12:09 #24608 Sergey Dzyublik: まあ、そもそもプラスからのゼロ線がなぜ引きずられたのか、ちょっと不明ではありますが。 Sergey Dzyublik 2019.05.15 12:13 #24609 A100:一方では「はい」、他方では「いいえ」とドキュメントに 明示されています。そして、StringToShortArrayも 同じことを言っています。 Количество элементов массива для копирования. Определяет длину результатной строки. По умолчанию -1, что означает копирование до конца массива, либо до встречи терминального 0.ただし、文字列中のNULL文字が適切に処理されることを妨げるものではありません。 astronom55 2019.05.15 12:17 #24610 こんにちは。MT5モバイル版で Alpariブローカーに接続できない。何が問題なのか?これはいずれ修正されるのでしょうか? 1...245424552456245724582459246024612462246324642465246624672468...3185 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
この点について、詳しく教えてください。
以下は私の主観です、どこか間違っていたらご指導いただければ幸いです。
StringLenは、文字列中の最初のNULL文字(0x0000)までO(n)で動作していましたが、現在はO(1)で動作しています。
文字列の長さは StringSetCharacter(str, pos, 0x00) で常に切り捨てることができたが、何らかの理由で StringSetLength が導入されたのである。
おそらく、文字列を扱う際のコードの高速化という課題が解決されたのだろう。
コードの高速化という課題は解決され、関数の半分が文字列中のNULL文字を処理し、残りの半分が処理しないことを誰も気にしなくなりました。
その結果
以下は私の主観です、どこか間違っていたらご指導いただければ幸いです。
StringLenは、文字列中の最初のNULL文字(0x0000)までO(n)で動作していましたが、現在はO(1)で動作しています。
文字列の長さは StringSetCharacter(str, pos, 0x00) で常に切り捨てることができたが、何らかの理由で StringSetLength が導入されたのである。
おそらく、文字列を扱う際のコードの高速化という課題が解決されたのだろう。
コードの高速化という課題は解決され、関数の半分が文字列中のNULL文字を処理し、残りの半分が処理しないことを誰も気にしなくなりました。
その結果
StringLenは、文字列の最初のNULL文字(0x0000)までO(n)で動作していましたが、現在はO(1)で動作しています。
開発者の皆様へ。
デフォルトの代入演算子(コピーコンストラクタ)に強制コード生成を指定する機能を追加してください。
ちょっと複雑なんです。デフォルトのコンストラクタの類型を使うのが簡単です。
1) あらゆる代入演算 子がデフォルトの代入演算子を上書きする。
2) あらゆるコピー演算子がデフォルトのコピー演算子を上書きする。
部分的にミスを修正しただけ. なんでやねん
MQLはNULL文字を含む文字列を扱う際に一貫した考えを持たないため、これが問題になっています。
例えば、StringToShortArrayは文字列中のNULL文字に対応していますが、逆関数のShortArrayToStringは対応していません...。
その結果、特定の課題を解決することよりも、バグを発見したり、回避策を探したりすることに多くの時間が費やされてしまうのです。
ちょっと複雑なんです。デフォルトのコンストラクタの類型を使うのが簡単です。
1) あらゆる代入演算 子がデフォルトの代入演算子を上書きする。
2)任意のコピー演算子は、デフォルトのコピー演算子をキャンセルします。
アンドゥはいらない、逆に強制世代が必要だ。
MQLには複雑な型のディープコピーを行う機能はなく、代入演算子やコピーコンストラクタではデフォルトで実装されています。
MQLでは、NULL文字を含む文字列を扱う際の一貫した考え方がないため、これが問題になっています。
例えば、StringToShortArrayは文字列中のNULL文字に対応していますが、その逆関数のShortArrayToStringは対応していません...。
一方ではイエス、他方では「or until terminal 0 is met」とドキュメントに 明示されています。
一方では「はい」、他方では「いいえ」とドキュメントに 明示されています。
そして、StringToShortArrayも 同じことを言っています。
ただし、文字列中のNULL文字が適切に処理されることを妨げるものではありません。