文字列末尾の改行検出

投稿者:ten 投稿日:2023/10/27(Fri) 15:57:49 No.2876

いつもお世話になっております。ちょっと詰まってしまったので・・・

文字列の最後に改行が入っているかもしれない時、「改行があるなら、それを削除しておく」という作業を行いたいのですが、文字列最後の改行が上手く検出できません。

---
text=「あいうえお[改行]かきくけこ[改行]」

もしtextの末尾から1文字取り出したものが「[改行]」であるなら
  「改行です」を表示する
  text=textの末尾から1文字消す
もし終わり
---

末尾が通常の文字であれば、上記で上手く動きます。例えば、
text=「あいうえお。」
とし、末尾の「。」を検出する・・・これは、問題ありません。

サイト内をうろうろし、

もし[textの末尾から1文字取り出したものが改行である]なら

という表現も使ってみたのですが、やはり駄目でした。どうすればいいでしょう?

Re: 文字列末尾の改行検出

投稿者:アーク 投稿日:2023/10/27(Fri) 16:32:10 No.2877

ten さん、こんにちは。アークです。

遣り方は幾つか在りますが ten さんのやり方に近い方法も有ります。

アスキーコードの始めの方は特殊なものが並んでいます。
普通に文字として扱えないものが多いです。
改行もその一つです。

二行目を下記の様にする事で希望する結果が得られると思います。

もし(textの末尾から1文字取り出したもの)のアスキー番号が10であるなら

Re^2: 文字列末尾の改行検出

投稿者:ten 投稿日:2023/10/27(Fri) 20:43:09 No.2878

ありがとうございます!

その方法も実は考えたのですが、「ASCIIコード範囲外」の時に大丈夫だろうか、という不安があって・・・

すみません、他の方法があれば、お教え下さい

Re^3: 文字列末尾の改行検出

投稿者: 投稿日:2023/10/28(Sat) 07:21:55 No.2879

こんにちは。

 まず前提として、改行を表すコードはCRとLFの2種類あり、OSによってそれらの組み合わせが違います。

Windows:CRLF
Macintosh:CR
Linux:LF

 ただし、エディタなどの指定によって、これらのOSごとの組み合わせとは異なる場合があります。

 さて、前置きが長くなりましたが、プロデルの「[改行]」は、標準的なWindowsの改行コード「CRLF」が利用されています。
 そのため、文字数的には2文字になるようです。

 とりあえず、提示いただいたコードをこんな感じに修正したらうまく動くようです。
 ポイントとしては、「もし」分で「で終わる」を使っているのと、文字列を消す際に末尾から2文字を指定しています。
 このような変換の際、私はいつも正規表現でやってしまうので、正規表現を使わずに書いたのは久々でした。
 ※デバッグのために「textを表示」という1行を入れていますが、不要であれば消してください。

----------
text=「あいうえお[改行]かきくけこ[改行]」

もしtextが「[改行]」で終わるなら
  「改行です」を表示する
  text=textの末尾から2文字消す
  textを表示
もし終わり
----------

 ちなみに、別の改行コードが混ざったファイルを読み込んで利用したり、HTTPでWebから取得したデータを表示する際は、別途改行コードを統一してあげる必要があるため、注意してください。

 以上、長くなりましたが、参考になれば幸いです。

 それでは。

Re^4: 文字列末尾の改行検出

投稿者:ten 投稿日:2023/10/28(Sat) 18:41:46 No.2880

ありがとうございます。そうか、2文字と判断するべきだったんですね。〜で終わる、という書き方の存在にも気づいていませんでした(知らないことがたくさんですねえ)

手元でやってみたところ、上手く行きました。ついでに、ちょっと削る文字数でどうなるか、確かめてみました。

1文字だけ削ってテキストエディタで確認したところ、改行コードがCRになってしまっていました(元はCRLF)。知らないままだと危なかった・・・

なるほど、正規表現!プロデルでは、上手く使えていませんが、いずれ勉強して使えるようになりたいと思っています。今回は、教えて頂いた方法で十分上手く回るので、これで行こうと思います。

ありがとうございました!

▲ページの先頭へ

- WebForum -