TStringList *List = new TStringList;
List->Duplicates = dupIgnore;
List->Sorted = true;
for(int i = 0; i < Memo1->Lines->Count; i++)
{
List->Add(Memo1->Lines->Strings[i]);
}
Memo1->Clear();
List->SaveToFile("NEW.txt"); //сохранение значения поля Memo без дубликатов строк в файл "NEW.txt"
Memo1->Text = List->Text; //в Memo будет уже отредактированное значение без дубликатов
Работа с файлами с использованием функций компонент
Многим визуальные компоненты и некоторые классы имеют доступ к функциям:
LoadFromFile("Имя файла");
SaveToFile("Имя файла");
Эти функции особенно удобны для работы с текстовыми фыйлами.
Примеры загрузки и сохранения файлов:
//Визуальный компонент TMemo:
Memo1->Lines->Clear();
Memo1->Lines->LoadFromFile("a.txt");
......
Memo1->Lines->SaveToFile("a.txt");
......
//Класс TStringList:
TStringList * ptStrintList;
ptStrintList->Clear();
ptStrintList=new TStringList();
ptStrintList->LoadFromFile("a.txt");
......
ptStrintList->SaveToFile("a.txt");
......
ptStrintList->Free();
//Визуальный компонент TListBox1:
ListBox1->Items->Clear();
ListBox1->Items->LoadFromFile("a.txt");
......
ListBox1->Items->SaveToFile("a.txt");
//Визуальный компонент TListBox1:
ComboBox1->Items->Clear();
ComboBox1->Items->LoadFromFile("a.txt");
......
ComboBox1->Items->SaveToFile("a.txt");
//Визуальный компонент TRichEdit:
RichEdit1->Lines->Clear();
RichEdit1->Lines->LoadFromFile("a.txt");
.....
RichEdit1->Lines->SaveToFile("a.txt");
И.т.д.
При использовании функции SaveToFile если файл не существует, то он будет создан. Во всех приведенных выше примерах создаются текстовые файлы. Компонент TRichEdit создает текстовый файл в формате .rtf, поэтому логичнее записать:
RichEdit1->Lines->SaveToFile("a.rtf");
Работа с текстовыми файлами с использованием методов перечисленных классов и компонент аналогична. Все они имеют счетчик строк:
Memo1->Lines->Count;
RichEdit1->Lines->Count;
ptStrintList->Count;
ListBox1->Items->Count;
ComboBox1->Items->Count;
Все компоненты позволяют удалять, вставлять и добавлять строки (пример удаления второй строки вставки на ее место новой строки и добовления в конец списка новой строки):
AnsiString vasS="Yes";
if(Memo1->Lines->Count >= 2)
{
Memo1->Lines->Delete(1);
Memo1->Lines->Insert(1,vasS);
}
Memo1->Lines->Add(vasS);
if(RichEdit1->Lines->Count >= 2)
{
RichEdit1->Lines->Delete(1);
RichEdit1->Lines->Insert(1,vasS);
}
RichEdit1->Lines->Add(vasS);
if(ptStrintList->Count >= 2)
{
ptStrintList->Delete(1);
ptStrintList->Insert(1,vasS);
}
ptStrintList->Add(vasS);
if(ListBox1->Items->Count >= 2)
{
ListBox1->Items->Delete(1);
ListBox1->Items->Insert(1,vasS);
}
ListBox1->Items->Add(vasS);
if(ComboBox1->Items->Count >= 2)
{
ComboBox1->Items->Delete(1);
ComboBox1->Items->Insert(1,vasS);
}
ComboBox1->Items->Add(vasS);
Содержимое строк можно получит по номеру строки n:
AnsiString vasS;
vasS=Memo1->Lines->Strings[n];
vasS=RichEdit1->Lines->Strings[n];
vasS=ptStrintList->Strings[n];
vasS=ListBox1->Items->Strings[n];
vasS=ComboBox1->Items->Strings[n];
Возможно присвоить некоторой строке текст для дальнейшей манипуляции содержимым текста как единой строкой и далее перенести исправленный текст опять в компоненты:
AnsiString vasS;
vasS=Memo1->Lines->GetText();
... манипуляции с текстом как единой строкой
Memo1->Lines->SetText(vasS.c_str());
RichEdit1->Lines->LoadFromFile("a.txt");
vasS=RichEdit1->Lines->GetText();
... манипуляции с текстом как единой строкой
RichEdit1->Lines->SetText(vasS.c_str());
vasS=ptStrintList->GetText();
... манипуляции с текстом как единой строкой
ptStrintList->SetText(vasS.c_str());
vasS=ListBox1->Items->GetText();
... манипуляции с текстом как единой строкой
ListBox1->Items->SetText(vasS.c_str());
vasS=ComboBox1->Items->GetText();
... манипуляции с текстом как единой строкой
ComboBox1->Items->SetText(vasS.c_str());
Кроме того компоненты TComboBox и TListBox позволяют (лучше в обработчике своих событий OnChange) получить доступ к выбранным строкам: