Читання тексту з файлу та збереження тексту в файл в TMemo



       


Чудовий контрол для читання текстового файлу. Дозволяє у два рядки програмного коду отримати текст із файлу у змінну типу StringІ в один рядок програмного коду вивести текст, який в ньому знаходиться, до файлу.

Задача

Петрик складав твір про зиму. Але комп'ютер "заглючив" під час збереження файлу та у всьому тексті замість букви "о" записав число "0". Допоможіть Петрику виправити помилки в тексті. У файлі tvir.txt знаходиться твір з помилками. Замініть нуль на букву "о". Вивести результат у файл tvir_edit.txt.

Ось тут не тільки читання з файлу, але і потрібно вивести інформацію в інший файл. Не біда – всього один рядок програмного коду!

Розміщуємо на формі TMemo


 Текст memo1 видаляємо у властивості lines, яка має всі рядки тексту, розміщені на контролі. 

Отже, читаємо текст з файлу tvir.txt на memo1:

memo1.Lines.LoadFromFile('tvir.txt');   

І все? Так, все. memo1 – ім’я контролу в проекті, Lines – рядки контролу,  LoadFromFile – завантаження з файлу tvir.txt.

Ось що вийшло:


               Файл прочитаний, виведений на  memo1, але не виправлені помилки в тексті твору. Будемо виправляти і виводити результат на ще один TMemo – memo2.   Додаємо його на форму. 

              Оголошуємо змінні i:integer лічильника циклу та T,Te:string рядкові. T – для отримання всього тексту з memo1Te – для запису виправленого тексту. Ото ж отримуємо ввесь текст з memo1:

T:=memo1.Text;  - тепер в змінній T знаходиться ввесь текст з memo1.

Тепер потрібно в циклі перебрати по одному символу з всього тексту змінної Т і зібрати його у змінній Те, причому, якщо нам попадеться символ 0, то записати замість нього в Те символ букви о.

Отримати символ з текстової змінної можна по його індексу в масиві символів цієї змінної. Індексація починається з 1. Тобто перший символ тексту буде в T[1], другий в T[2] і т.д.

Як дізнатися, поки нам виконувати цикл, тобто до якої величини? Початок зрозумілий – від 1 символу. А от є чудова функція length,  яка визначає кількість всіх символів у текстовій змінній. Тобто, щоб дізнатися, скільки символів у змінній Т, потрібно виконати код length(T).

А тепер код циклу

for i:=1 to length(T) do    - цикл від першого до останнього символу змінної Т
     if (T[i]<>'0') then         - якщо поточний символ T[i] не дорівнює нулю
      Te:=Te+(T[i])               - додаємо його до змінної Те, в якій збираємо посимвольно виправлений текст
     else Te:=Te+('о');       - інакше (якщо зустрівся нуль), замість нього додаємо символ букви о.
memo2.Lines.Add(Te);   - далі виводимо Te на memo2
І одним рядком зберігаємо виправлений текст із memo2 до файлу
memo2.Lines.SaveToFile('tvir_edit.txt');
memo2 – ім’я контролу в проекті, Lines – рядки тексту в контролі, SaveToFile – запис до файлу tvir_edit.txt.

Отже, TMemo чудово підходить як для читання тексту з файлу, так і для збереження тексту, який в ньому розмістили, у файл.

Ось який код отримуємо в результаті:

var
  i:integer;
  T,Te:string;  

procedure TForm1.Button1Click(Sender: TObject);
begin
  memo1.Lines.LoadFromFile('tvir.txt');
  T:=memo1.Text;
  for i:=1 to length(T) do
   if (T[i]<>'0') then Te:=Te+(T[i]) else Te:=Te+('о');
  memo2.Lines.Add(Te);
  memo2.Lines.SaveToFile('tvir_edit.txt');
end;     

І ось таку програму:



Хотів би зупинитися на наповненні даними TMemo

Доповнимо попередню задачу виведенням результату обчислення суми та кількості чисел з файлу у файл resul.out.

Нагадаю, що там програма на Label виводила кількість чисел у файлі та їхню суму









        Кожне виконання коду memo1.Lines.Add  додає новий рядок символів (тексту) до memo1.
Останній рядок коду заносить текст з memo1 до файлу.

Тобто, якщо нам потрібно занести до файлу якусь результуючу інформацію, ми зразу порядково memo1.Lines.Add  виводимо її на TMemo, а потім memo1.Lines.SaveToFile заносимо її у файл.






Немає коментарів:

Дописати коментар