改行を区切りとした文字列取得のやり方は?

解決


かなもの  2005-03-31 04:51:20  No: 14030

かなものと申します。
以前にいくつかお世話になっておりました。

今回、どうしてもわからない事が出てきました…

簡単に申し上げると、Perlの下記スクリプトな感じの内容を、
Delphi上で再現させたいのです。

  $String = (半角スペースや改行を含んだ1つの文字列);
  @data = split(/\n/,$String); 

  foreach(@data){
    if (文字列検索条件) {
    $DataList[i] = $_:
    i = i + 1;
    }
  }

数日ほど検索を行っていましたが、どうしてわかりませんでした。
TStringList.Delimiter  で、#13を区切りとしてみましたが、
半角スペースも区切りとして認識してしまい、文字列が崩れてしまいました。

現在仮の状態でTMemo横に引き伸ばして、
下記のような感じで使っています。

str1 := (半角スペースや改行を含んだ1つの文字列);
Memo1.Lines.Add(str);

for i := 0 to Memo1.Lines.Count -1 do
 begin
 
   if (文字列検索条件) then
    begin
     DataList[j] := Memo1.Lines.Strings[i];
     j := j + 1;
    end;

end;

end;

どうか、皆様のお力をお貸し下さい。
情報が足りなければ、追ってご報告致します。
よろしくお願い致します。

OS:WindowsXP SP2
Ver:Delphi 6 Personal


...  2005-03-31 05:27:14  No: 14031

TStringListを  つかうのを知っていて
改行でくぎりたいって
ちょっと  おまぬけな質問です。

st := TStringList.create
try
  st.text := text;
  for i := 0 to st.count-1 do
   memo1.lines.add(st[i]) 
finally
  st.free
end;


たかみちえ  URL  2005-03-31 06:38:45  No: 14032

Textプロパティにそのまま押し込めばいいと言うことではないですかね?


かなもの  2005-03-31 07:31:43  No: 14033

レスありがとうございます。

Memo1.Lines.Add(str);

これだとOKなのですが、

var
   lines:TStrings;

begin

        lines := TStrings.create;
        lines.Text := str;

こうした時に、Textの所でエラーが出るのです。
もう少し調べてみたいと思います。

勉強不足で申し訳ないです。


りおりお  2005-03-31 07:35:34  No: 14034

TStrings は抽象クラスですからインスタンスをつくってはいけません。
具体クラス TStringlist を使ってください。


かなもの  2005-03-31 10:24:56  No: 14035

レスありがとうございます。

var
   lines:TStringList;

begin

        lines := TStringList.create;
        lines.Text := str;

これで代入が出来ました。
これで4日も悩んでいました…。

実は、TStringList の Text 使うの(今回のパターン)
が初めてでして、勝手が全然わかっていませんでした…。
 
抽象クラス・具体クラスというのは、初めて耳にしました。
自分、まだまだ勉強不足ですね。
今までTStringsを使っていたので、
それは間違いだったという事が今回勉強出来ました。

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


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

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






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