お知らせ

電子会議

ライブラリ

パレット

Delphi FAQ検索

Delphi FAQ一覧

サンプル蔵





FDelphi FAQ
16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル

"改行コード変換(\n←→CR+LF)"






☆説明
 chgEnN2CrLf()は文字列中の \n を CRLF に変換します。
 chgCrLf2EnN()は文字列中の CRLF を \n に変換します。

☆準備
 1.Form1 の Memo1,Button1,Button2 を貼り付けます。
  2.ソースを追加して、Button1,Button2を押せばテストできます。

☆補足
 ・Delphi3.1 でテスト。
 ・CSVデータ中に改行を埋め込む場合に使っています。

[ソース本体]
----------------------------------------------------------------------
・・・(省略)
  private
    { Private 宣言 }
    Function chgEnN2CrLf(source: String): String;
    Function chgCrLf2EnN(source: String): String;
・・・(省略)

Function TForm1.chgEnN2CrLf(source: String): String;
var
  pos: Integer;        // \nの位置
  work: AnsiString;    // \n→CR+LF変換用
begin
  // \n→CR+LFに変換
  work := source;
  pos := 1;  // 0以外であれば良い
  while pos <> 0 do
  begin
    pos := AnsiPos( '\n', work );
    if pos = 0 then Break;

    work[pos + 0] := #13;  // CR
    work[pos + 1] := #10;  // LF
  end;
  Result := work;
end;

Function TForm1.chgCrLf2EnN(source: String): String;
var
  pos: Integer;        // CR+LFの位置
  work: AnsiString;    // CR+LF→\n変換用
begin
  // CR+LF→\nに変換
  work := source;
  pos := 1;  // 0以外であれば良い
  while pos <> 0 do
  begin
    pos := AnsiPos( #13#10, work );
    if pos = 0 then Break;

    work[pos + 0] := '\';
    work[pos + 1] := 'n';
  end;
  if Copy(work, Length(work) - 1, 2) = '\n' then
  begin
    // (TMemo使用時)文字列の最後に付いた、\nを削除する
    work := Copy(work, 1, Length(work) - 2);
  end;
  Result := work;
end;
----------------------------------------------------------------------

[テストソース]
----------------------------------------------------------------------
procedure TForm1.Button1Click(Sender: TObject);
var
  chgStr: AnsiString;
begin
  // メモに文字列をセット
  chgStr := 'テスト\nここで改行されるはず\nほら、このように';

  memo1.Clear;
  memo1.Lines.Add( chgEnN2CrLf( chgStr ) );
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  // メモから文字列取り出し
  ShowMessage( chgCrLf2EnN( memo1.Text ) );
end;
----------------------------------------------------------------------

                              98/1/18(日) 09:18pm  LDM03756 佐藤 充男

Original document by 佐藤 充男   氏 ID:(LDM03756)


ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。

Copyright 1996-2002 Delphi Users' Forum