Чудовий контрол для читання текстового файлу. Дозволяє у два рядки програмного коду отримати текст із файлу у змінну типу 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 – для отримання всього тексту з memo1, Te – для запису виправленого тексту. Ото ж отримуємо ввесь текст з 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 заносимо її у файл.
Немає коментарів:
Дописати коментар