TStringList *sl;
AnsiString SFbame = "ABC";
__fastcall TForm1::TForm1(TComponent* Owner): TForm(Owner)
{
sl = new TStringList;
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
int len;
if( OpenDialog1->Execute() == false ){
return;
}
sl->LoadFromFile(OpenDialog1->FileName);
// ここで読み込んだファイルの1部を消去したい
for(int i=0; i<sl->Count; i++){
sl->Delete(i);
}
sl->SaveToFile(SFname);
}
--
Delete(i) で、要素がひとつ少なくなって、Count プロパティもひとつ
少なくなります。
N個のうちの 0 番目のアイテムを削除すると要素数は(N-1)個になり、
0番目には1番目だった要素がシフトしてきます。
ループ変数は +1 されて次の要素を削除しますから、1つ間隔で消され
ることになる、という図式は正しい動きです。
for( ; 0 < list->Count; )
{
list->Delete(0);
}
ってな感じで目的の動作になりますね。
ただ、要素がひとつ削除されるたびに、残りすべての要素がシフトされ
ることになりますので、効率が悪いです。
for( int i = list->Count - 1; 0 <= i; i-- )
{
list->Delete(i);
}
とやると、比較的効率がよろしいかと。
ゆーちさん、早々に丁寧なご説明ありがとうございます。
良くわかりました。
ありがとうございました。
--