条件付きで「。」や「、」の後で改行したNo.05668
南天 さん 07/11/02 13:42
 
いつもお世話になっております。

1行に80字以上ある時に「。」や「、」の後で改行したいのですが
宜しくお願い致します。

[ ]
RE:05668 条件付きで「。」や「、」の後でNo.05669
K'zawa さん 07/11/02 14:50
 
南天さん、こんにちは。
K'zawaです。

>1行に80字以上ある時に「。」や「、」の後で改行したいのですが

こんなのでしょうか?

setcompatiblemode 0x10F;
if(selecting){
    rangeeditin;
    gofiletop;
}
while(1){
    searchdown "(?<=[、。][  ]*)(?=[^  \\n])",regular,nohilight;
    if(!result) break;
    if(column>80) insert "\n";
}

[ ]
RE:05668 条件付きで「。」や「、」の後でNo.05670
ENCODINGSHIFTJIS さん 07/11/02 14:57
 
>1行
なかなか、難しい用語です、禁則とか ぶら下がりなど を考えると。

クイック&ダーティー な方法
全置換 (正規表現 on)

^(.{37}.+?[、。])(.)

\1\n\2

37 は全角文字が大部分という想定です、崩れた箇所は手修正。

[ ]
RE:05670 条件付きで「。」や「、」の後でNo.05671
南天 さん 07/11/02 16:55
 
K'zawaさん・ENCODINGSHIFTJIS さん 回答ありがとうございます。

回答後に済みませんが自分には、ずいぶん難しいマクロになりそうなので
先に、質問文の条件漏れがありますので追記します。

・改行をいれる文は、選択部分または、選択していないときは全文で実行
・前回質問の05664「指定文字または、空白文字で改行したい。 」が前提です。
  「。」の後に空白文字がある場合で 文末の場合改行を入れない。

--K'zawaさんへ--------------------------------------------------------------
-------
前回の質問の続きで記入してもらいありがとうございます。

変換途中で
部分編集になって、部分編集の解除できません。(解除の仕方が解りません)
たぶん文章に「 文字列。(文字列) 」が入っているからでしょうか?
rangeeditin;の行削除すると、全文で実行してしまいます。

--ENCODINGSHIFTJIS さん-------------------------------------------------------
前回質問の続きのつもりで質問しているのに記載していなくて済みません
自分なりに後で追記すれば、良いかなと思いやってみました。

replaceall "^(.{37}.+?[、。])(.)","\1\n\2",regular,inselect;

だと、文字が消えて1や2に置換されてしまいます。
(たぶん自分の式が間違っていると思います。)
また、下記のように変更可能でしょうか?

replaceall "^(.{37}.+(?<=[、。][  ]*)(?=[^  \\n]))(.)","\1\n\2"

マクロが良くわかっていないので、検討外れの返信と思いますがよろしくお願いしま
す。

[ ]
RE:05671 条件付きで「。」や「、」の後でNo.05672
K'zawa さん 07/11/02 22:14
 
南天さん、こんにちは。
K'zawaです。

>1行に80字以上ある時に「。」や「、」の後で改行したいのですが

いまさらですが、これって、「。」や「、」はどこにあるという想定なんでしょ
うかね?
80を超えて最初の句読点で改行するのか、80を超えないように改行しようという
ことか??

とりあえずそれは置いといて、

setcompatiblemode 0x10F;
disabledraw;
#sel=selecting;
if(#sel){
    rangeeditin;
    gofiletop;
}
while(1){
    searchdown "(?<=[、。][  ]*)(?=[^  \\n])",regular,nohilight;
    if(!result) break;
    if(column>80) insert "\n";
}
if(#sel) rangeeditout;

ちなみにこれは、句読点(とスペース)の次の文字が80を超えているという条件
になってますが…。

# マクロの中では、'\'を'\\'と書きます。

[ ]
RE:05672 条件付きで「。」や「、」の後でNo.05673
南天 さん 07/11/03 07:55
 
K'zawaさん おはようございます。

>いまさらですが、これって、「。」や「、」はどこにあるという想定なんでしょう
>かね?
>80を超えて最初の句読点で改行するのか、80を超えないように改行しようというこ
>とか??

「80を超えて最初の句読点で改行」を考えておりました。
超えないようにという考え方は、気がつかなかった。済みません
この考え方を進めると、
 ・50文字から80文字のあいだにある「。」「、」で改行、80文字以上は強制改行
  160行以上は、その繰り返し
など、いろいろ考え方があるんですね。どうなるか、もうさっぱりです。

結果です。
マクロを実行してみたら、バッチリ上手くいきました。ありがとうございます。

[ ]
RE:05671 条件付きで「。」や「、」の後でNo.05674
encodingshiftjis さん 07/11/04 07:53
 
>replaceall "^(.{37}.+?[、。])(.)","\1\n\2",regular,inselect;

"\1\n\2"

"\\1\\n\\2"
 ¥は ””文字列の記法で エスケープ文字です
--
行を箱に整形するのは「○○整形」という用語です(行、文書)
マクロライブラリにも 何種類か あります。
印刷と同様にかなり複雑です(見た目と違って)

[ ]
RE:05674 条件付きで「。」や「、」の後でNo.05682
南天 さん 07/11/06 17:01
 
encodingshiftjisさん
返信遅れて済みません
エスケープ文字という概念が理解できなかったんですが
エクセルの数式での””にあたるんですね。
句読点の改行と追加指定文字では、上手くいきました。
ただ、空白を入れると上手くいきませんでした。
replaceall "^(.{37}.+(?<=[、。][  ]*)(?=[^  \\n]))(.)","\\1\\n\\2"
今後の為\\1\\n\\2の意味を詳しく教えていただきたいのですが
宜しくお願いします。

[ ]
RE:05682 条件付きで「。」や「、」の後でNo.05684
ENCODINGSHIFTJIS さん 07/11/07 09:40
 
>今後の為\\1\\n\\2の意味を詳しく教えていただきたいのですが

エスケープ文字の処理が二段階 作用するという事です

1.”文字列記法の エスケープ処理で
\\1\\n\\2

\1\n\2

2.正規表現式の エスケープ処理で
\1\n\2

第一マッチ範囲、改行、第二マッチ範囲

になります。\\n は \n でもよい、文字列解釈の段階で
\n → 改行コード となって そのまま 正規表現式に 渡るから。

[ ]
RE:05684 条件付きで「。」や「、」の後でNo.05695
南天 さん 07/11/19 12:42
 
ENCODINGSHIFTJIS さん
返信遅れて済みません。
ENCODINGSHIFTJIS さんのコメントで理解できました。
本当にありがとうございました。

[ ]