配列に入れた改行を含む文字列の復元は?

投稿者:KNIGHT 投稿日:2024/02/25(Sun) 17:22:43 No.2960

御世話になります。

以前のプロデルでは、テキスト領域に保存された改行を含む文字列は、一旦、配列に入れても、「改行」コードはそのままで取り出せたと思うのですが、現在のプロデルでは、「改行を含む文字列」を配列に入れてしまうと、「改行コード」が「CRLF」から「CR(&H13)」のみに変更されてしまうのですね!?

「表示する」とか「報告する」という命令では、ちゃんと「改行」が再現されているように見えるのですが、テキスト領域に、テキスト領域の内容を記憶させた配列を、元のテキスト領域に戻してやると、改行がなくなってしまいます(「0D」だけになっているようです)。

現状では、姑息的に
〜〜〜
 テキスト領域1の内容は、保存配列(5)から13のキャラクタを、[エンター]へ置き換えたもの
〜〜〜
といった変換をして、もとの CRLFに戻していますが、もっとスマートな復元の仕方があれば、ご教授願えませんでしょうか?

あるいは、単に、「0D0A」となるべきところが、なぜか「0A」が抜け落ちて、「OD」だけになってしまっているのでしょうか?

よろしくお願いいたします。

Re: 配列に入れた改行を含む文字列の復元は?

投稿者:ゆうと <yutopia あっとまーくutopiat.net> 投稿日:2024/02/28(Wed) 20:44:27 No.2964

こんにちは

> 以前のプロデルでは、テキスト領域に保存された改行を含む文字列は、一旦、配列に入れても、「改行」コードはそのままで取り出せたと思うのですが、現在のプロデルでは、「改行を含む文字列」を配列に入れてしまうと、「改行コード」が「CRLF」から「CR(&H13)」のみに変更されてしまうのですね!?

現在も以前のプロデルも、プログラム上で改行コードを変更することはありません。

ただし、プロデルデザイナで使用しているリッチテキストボックスの仕様で、
意図せず勝手に改行文字が変更される挙動が起きるようで、プロデルデザイナがそのための対処を行っています。特に文字列定数で、一時的に改行コードが変わってしまうかもしれません。

基本的には、プロデルデザイナの右下の「CrLf」となっている箇所で改行コードを選択できますので「Lf」などとなっている場合は、「CrLf」に変更することで改行コードは統一されます。

Re^2: 配列に入れた改行を含む文字列の復元は?

投稿者:KNIGHT 投稿日:2024/02/29(Thu) 08:55:46 No.2967

こんにちは、お世話になります。
> 現在も以前のプロデルも、プログラム上で改行コードを変更することはありません。
そうですか・・・

以下のようなプログラムで、以前は、きちんと[改行]が復活していたのですが、
プロデルを新しいものにしたタイミングで、[改行]が復活しなくなったので、バイナリーエディタで確認したところ、[改行]に相当する部分で、[&H0D]のみになっていたのです。
それで、配列内での[改行]コードの取り扱いが変わったのかなと思いました。

〜〜〜〜
メイン画面を表示する
待機する
メイン画面とは
  ウィンドウを継承する
  はじめの手順
    初期化する
    ーー貼り付けた部品に対する操作をここに書きます
  終わり
  初期化する手順
    ーー自動生成された手順です。ここに書き加えたプログラムは消える可能性があります
    初期化開始する
    この内容を「メイン画面」に変える
    この文字色を「標準の文字」に変える
    ボタン2というボタンを作る
      その位置と大きさを{159,199,86,33}に変える
      その内容を「配列から復元」に変える
      その移動順を2に変える
      その文字色を「標準の文字」に変える
    ボタン1というボタンを作る
      その位置と大きさを{22,198,103,34}に変える
      その内容を「配列に保存」に変える
      その移動順を1に変える
      その文字色を「標準の文字」に変える
    テキスト領域2というテキスト領域を作る
      その位置と大きさを{35,127,193,47}に変える
      その内容を「ここにも文章を
改行を入れて
入力します。」に変える
      その移動順を4に変える
    テキスト領域1というテキスト領域を作る
      その位置と大きさを{36,39,193,65}に変える
      その内容を「改行を含む
文字列を
テキスト領域に入力します。」に変える
      その移動順を3に変える
    初期化終了する
  終わり
  ボタン1がクリックされた時の手順
    文章配列は、{[テキスト領域1の内容]、[テキスト領域2の内容]}
    文章配列を、「テスト.txt」へ保存
  終わり
  ボタン2がクリックされた時の手順
    文章配列は、「テスト.txt」から読み込んだものを配列化
    テキスト領域1の内容は、文章配列(1)  
    テキスト領域2の内容は、文章配列(2)  
  終わり
終わり
〜〜〜

39行目を以下のように
    文章配列(1)は、テキスト領域1の内容
    文章配列(2)は、テキスト領域2の内容
と変更しても最初と同様に、読みだした文章の「改行」は、「&H0D」のみになってしまいます。
また、39行目を

  文章配列は、{[テキスト領域1の内容]、[テキスト領域2の内容]}を配列化

のように変更すると、以下のようなエラーメッセージが出てどうすればよいの分かりません。

〜〜〜[エラーメッセージ]〜〜〜〜
「配列化」という手順が複数あり、どの手順を実行するか決められません。
引数の助詞や型が合うように指定してください。

手順の候補:
[文字列]を配列化
[画像]を配列化

[エラー番号117] [メイン画面.ボタン1がクリックされた時:39行目]
プロデル 2.0.1226 (64)
〜〜〜[以上、エラーメッセージ]〜〜〜〜

どうも、44行目の
    文章配列は、「テスト.txt」から読み込んだものを配列化
の「配列化」した時点で、[改行]⇒[&H0Dのみ]となっているようです。

以下のプログラムを実行してみたところ、[エンター]⇒[&H0Dのみ]となっていました。
〜〜〜〜
データは「{AA[エンター]A,BBB,CCC}」を配列化
データ(1)を表示する
データ(2)を表示する
データ(3)を表示する
データを「テスト3.txt」へ保存する
〜〜〜〜

ちなみに、「テスト3.txt」をメモ帳で開くと、自動的に[0D]⇒[0D0A]に変換されてしまって、問題ないかのように見えてしまいます。・・・が、テキスト領域に読み込むと、問題があることが露呈します。

テキスト領域を含む複数の部品の内容を、配列化して、ファイル保存し、またファイルを読みだして、テキスト領域を含む複数の部品の内容を復元するにはどうすればよいのでしょうか?
よろしくお願いいたします。

文字列から配列化した時に改行コードが変わる

投稿者:ゆうと <yutopia あっとまーくutopiat.net> 投稿日:2024/03/07(Thu) 14:12:03 No.2973

こんにちは プログラムありがとうございます。
状況再現できました。

> どうも、44行目の
>     文章配列は、「テスト.txt」から読み込んだものを配列化
> の「配列化」した時点で、[改行]⇒[&H0Dのみ]となっているようです。

ご指摘の通り、文字列を「配列化」した時の動作に意図しない変更がありました。
「配列化」手順にバグがありましたので、最新版1.9.1227 で修正しました。

最初の投稿では、単に配列へ改行を含む文字列を追加すると&H0Dだけに変わる、という旨に読み取れました。思い込みもあるかと思いますが、簡単なプログラムを作って事前に調査頂けると嬉しいです。

なお、配列化の使い方は問題ありませんが
> 文章配列は、{[テキスト領域1の内容]、[テキスト領域2の内容]}を配列化
と書くと、配列を配列化しようとしていますので、エラーとなります。
配列化できるのは文字列の場合(と画像)だけとなります。


ご確認ください。

確認いたしました。修正ありがとうございました。

投稿者:KNIGHT 投稿日:2024/03/08(Fri) 06:59:52 No.2974

「配列化」手順のバグ修正をありがとうございます。
これで姑息的な置換作業をしなくて済みます。

▲ページの先頭へ

- WebForum -