Файли з даними символьного типу

Розглянемо тепер особливості запису у файл та читання з файла текстової інформації. Для цього можна використову­вати різні компоненти, як розглянуті раніше, так і інші, на­приклад, компонент ListBox, котрий реалізує введення рядка тексту безпосередньо за допомогою клавіатури і спеціального редактора. Вікно цього редактора відкривається, якщо вибрати властивість Items і клацнути мишкою на кнопці з зображенням крапок у вікні Object Inspector.

Розглянемо програмне використання компонента ListBox.

Приклад 16.6. Необхідно ввести у вікно редактора ListBox деякий текст і записати цей текст у файл. Припустимо, що при читанні фай­ла в тексті були виявлені помилки. Потрібно програмними засобами виправити ці помилки і знову текст записати у файл.

Оскільки компонент ListBox використовує клас об’єктів TStrings, то він успадковує всі властивості і методи цього кла­су, наприклад, такі методи, як:

  • SaveToFile(іф) — запис тексту у файл з ім’ям «іф»;
  • LoadFromFile(іф) — читання файла «іф» у вікно компо­нента ListBox.

Для розв’язання прикладу розмістимо на формі такі компо­ненти:

  • Label1— для виведення підказки при редагуванні тексту;
  • Edit1 — для редагування тексту;
  • ListBox — для розміщення тексту;
  • кнопку Button1 з назвою «Записать»;
  • кнопку Button2 з назвою «Прочитать»;
  • кнопку Button3 з назвою «Исправить»;
  • кнопку BitBtn з назвою «Close».

Форми і програмний код мають вигляд:



// глобальные данные

AnsiString s1, s2, s3;

int k, mode=0;

//-----------------------------------------------------------------------------------------

//------------------------------------------- запись текста в файл

void_ fastcall TForm1::Button1Click(TObject *Sender)

{

ListBox1->Items->SaveToFile("d:\\Users\\Dat_Base\\stich.txt");

ListBox1->Items->Clear();

}

//---------------------------------------- чтение текста из файла

void_ fastcall TForm1::Button2CIick(TObject *Sender)

{

ListBox1->Items->LoadFromFile("d:\\Users\\Dat_Base\\stich.txt"); }

//--------------------------------------------- исправление текста

void_ fastcall TForm1 ::Button3Click(TObject *Sender)

{ int i;

for (і = 0; і < ListBox1 -> Items -> Count; i++)

// занесение выделенной строки в переменную s1

if (ListBox1->Selected[i])

{ s1=ListBox1->Items->String[i];

Label1->Visible=true; //визуализация компонентов Edit1 и Label1

Edit1->Visible=true;

Label1->Caption="Bведите заменяемый текст";

k=i;

Edit1->SetFocus(); }                // передача фокуса компоненту Edit1

}

void_fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key)

{

if (Key==13)                                // если нажата клавиша Enter?

{

mode++;

if (mode==l)

{ //запись неправильного фрагмента в перемен.s2 

s2=Edit1->Text; Edi1->Text="";

Label1->Caption = "Введите правильный текст";

}

else

if (mode==2)

{ // запись правильного фрагмента в перемен. s3 

s3=Edit1->Text; Edit1->Text="";

Label 1 -> Caption=" Результат";

//формирование правильного текста
int t=s1.Pos(s2);

Edit1->Text=s1.SubString(1,t-1)+s3+s1.SubString(t+s2.Length(),20);

}

else

if (mode==3) {

ListBox1->Items->Strings[k]=Edit1->Text;

mode=0;

Editl->Text=" ";

Label1->Visible=false;

Edit1->Visible=false;

}

}

}

Під час створення програмного коду оголошуються глобаль­ні змінні s1, s2, s3 — типу AnsiString, а також k і mode = 0 типу int. Далі записані оброблювачі подій. Перший оброблю­вач складається з двох параметрів: оператора запису у файл — ListBox1->Items->SaveToFile(iф) і оператора очищення поля компонента ListBox для розміщення там прочитаного тексту з файла — ListBox->Items->Clear().

Другий оброблювач служить для читання тексту з файла у вікно ListBox.

Третій оброблювач разом з четвертим розв’язують задачу ре­дагування тексту. Для цього спочатку мишкою треба виділити рядок тексту, що містить помилку, потім у циклі for визнача­ється цей рядок і записується у змінну si. Далі візуалізуються компоненти Label1 і Edit1, що при проектуванні форми бу­ли сховані шляхом надання їх властивостям Visible значення «false». При цьому у властивості Caption компонента Label1 бу­ло записано текст: «Введите заменяемый текст», а вікно компо­нента Edit1 було очищено. У вікні компонента Edit1 треба ввес­ти помилковий текст, тобто той фрагмент, який треба замінити.

Цей приклад першу помилку містить у першому рядку, де замість «в лесу» написано «в углу». Тому спочатку був виділе­ний перший рядок, а у вікно Edit було введено помилкове слово «углу». Після введення цього фрагмента треба натиснути клаві­шу Enter, і далі почне працювати четвертий оброблювач, тобто оброблятися подія Edit1KeyPress. Тут змінна mode збільшується на 1, змінній s2 буде присвоєне значення введеного помилкового фрагмента, у полі компонента Label1 з’явиться текст «Введите правильний текст», а поле введення — Editl знову очиститься від раніше введеного тексту. Тепер треба ввести правильний фрагмент (у нашому випадку слово «лесу») і натиснути Enter. Знову активується оброблювач Edit1KeyPress(), mode одержить значення 2, у змінну s3 буде записаний правильний текст, далі поле Edit1 знову очиститься, a Label1 одержить текст «Резуль­тат». Після чого у поле Edit1 буде записано рядок, в якому помилковий текст буде замінено правильним. У цьому процесі ви­користовувалися рядкові функції Pos() і SubString().

Якщо в даному рядку більше помилок немає, треба натис­нути Enter і рядок з поля Edit1 буде переписано у вікно ListBox.

У випадку, коли необхідно редагувати пакет далі, треба виділити відповідний рядок і всі операції повторити.

На формі зображені всі етапи цієї роботи, а в програмному коді додатка — усі необхідні для цього оброблювача події.

Форма розглянутого прикладу має чотири кнопки, а запис тексту у файл і читання його з файла здійснюється однією ко­мандою.

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *