マウスで選択範囲の行の空白を削除したい


33462367  2018-04-25 09:00:00  No: 49128

ツ  ツ  ツ  
var
    I: Integer;
    S1,S2: String;
begin

    S1 := '';
    S2 := Memo1.SelText;
    while S1 <> S2 do
    begin
      S1 := S2;
      S2 := StringReplace(S1,#13#10#13#10,#13#10,[rfReplaceAll]);
    end;
    Memo1.SelText := S2;


aaa  2018-04-26 01:09:59  No: 49126

マウスで選択した範囲の行内の空白行を削除したいのですが、

テキスト全体ですと下記でよいのだと思いますが、

Memo1.text:=StringReplace(s,#13#10#13#10,#13#10,[rfReplaceAll]); 

選択範囲内の場合は、

  For i:= ASelStart to  ASelEnd do  //選択範囲開始〜範囲終了まで

    Memo1.Lines[i]:=〜〜〜  ←ここの部分の処理方法が判らず困っています

一行一行確認をする為に、前後に改行があるかどうかが不明と
なってしまいますし、この処理だと処理速度が遅くなりそうですね。

それとも、選択部分を一旦、変数に代入して全体置換した方が良いのかと
思いますが、その場合、選択部分の置換後のテキストと元のテキストの
合体のさせ方が判りません。

要約しますと以下の2点お教えていただけますでしょうか?

①一行一行確認をしながら空白改行を削除する方法

②選択範囲を一旦別の変数に代入後、一括置換し、元に戻す方法

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


通りすがり  2018-04-26 04:01:14  No: 49127

for I := ASelEnd downto ASelStart do
begin
  if Memo1.Lines[I] = '' then
  begin
    Memo1.Lines.Delete(I);
  end;
end;
処理速度が気になる場合は全体を
Memo1.Lines.BeginUpdate;
try
  ...

finally
  Memo1.Lines.EndUpdate;
end;
で囲めばOK。

ということではなく?


aaa  2018-04-26 09:00:00  No: 49129

通りすがりさん

ヲサヲサヲサヲサヘアョフロノンヲサスヲサァァヲサヲサ
ヲサヲサヲサヲサヲサヲサヘアョフョトィノゥサヲサ

大変シンプルに実現出来たのですね。なるほど。

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

ウウエカイウカキさん

貴重なコードをありがとうございました。

こんなにシンプルに選択部分を置換して処理できるのですね。

おかげさまでスマートに解決できました!


※返信する前に利用規約をご確認ください。








  このエントリーをはてなブックマークに追加