Tstringsに降順のindexにデータを格納するには?


きむ  2013-08-02 05:59:26  No: 44952

下記のようにInsert を使用しても格納したデータが消えてしまいます。
Var
buf: Tstrings 
Begin 
buf:=Tstringlist.create 
buf.insert (0, ``)
buf.insert (1, ``)
buf.insert (1, `abc`)
buf.insert (0, `def`)
End
最終的にbufの[1]にはabc が格納されて欲しいのです。
[1]にデータを格納した後[0]にデータを格納したのが駄目だと思ったのですが、なぜデータが消えてしまうのでしょうか?
なにか代価案はありますでしょうか?


けど  2013-08-02 07:10:05  No: 44953

せめて動くコードを書こう
var
  buf:TStrings;
Begin
  buf:=TStringList.Create;
  try
    buf.Insert(0,'');//一行目に空行挿入
    buf.Insert(1,'');//二行目に空行挿入 - 現在空行が二行
    buf.Insert(1,'abc');//二行目に「abc」 - 現在空行+abc+空行
    buf.Insert(0,'def');//一行目に「def」 - 現在def+空行+abc+空行
    Memo1.Text:=buf.Text;
  finally
    buf.Free;
  end;
end;

>なぜデータが消えてしまうのでしょうか?
消えたデータなんか無いよ

どんな結果が欲しいのかな?


通りすがり  2013-08-02 15:38:55  No: 44954

insertは挿入で最初のパラメータは挿入位置なので、そのコードだとデータの変更はされずに追加だけされてます。

単に buf[1]:= 'abc';
とやれば 1 に abc が入ります。

buf:= TStringList.Create;
while buf.Count<2 do buf.Add(''); 
buf[0]:='def';
buf[1]:='abc';


take  2013-08-03 02:10:44  No: 44955

TStringListの中身見た方が早いかもね

Memoを1こ置いて
処理終わった後に

Memo1.Lines.Assign(buf);

で、中身が表示されます。

buf[1] ←の中だけ見て、消えたと言われているだけでは無いでしょうか?


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

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






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