Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Metod_Lab_OP_2_v2.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
872.96 Кб
Скачать
    1. Текстові файли

Мета роботи - вивчити особливості створення і обробки текстових файлів даних.

      1. Теоретичні відомостi

Текстові файли - це файли, що складаються із компонентів–рядків змінної довжини (від 0 до 255 символів). Кінець кожного рядка позначається спеціальною ознакою кінця рядка Eoln, що представляє собою пару керуючих символів: "переведення каретки" (#13) і "переведення рядка" (#10).

      1. Приклади програми

Приклад. Створити текстовий файл. Впорядкувати слова в кожному його рядку за алфавітом, переписавши їх в новий текстовий файл. Дописати в кінець нового файлу повідомлення про загальну кількість оброблених слів.

Алгоритм

  1. Початок.

  2. Ввести текстовий файл.

    1. Відкрити файл для запису.

    2. Повторювати дії, поки не натиснута клавіша 'n':

      1. Ввести рядок.

      2. Записати його у файл.

      3. Запит на введення наступного рядка.

    3. Закрити файл.

  3. Вивести введений файл для перегляду.

    1. Відкрити файл для читання.

    2. Повторювати дії, поки не досягнутий кінець файла:

      1. Зчитати поточний рядок.

      2. Вивести його на друк.

    3. Закрити файл.

  4. Створити новий текстовий файл, який містить впорядковані рядки першого.

    1. Відкрити перший файл для читання.

    2. Відкрити другий файл для запису.

    3. Повторювати дії, поки не буде досягнутий кінець першого файла:

      1. Зчитати поточний рядок файла.

      2. Вилучити його початкові пробіли.

        1. Повторювати дії, поки перший елемент рядка – пробіл:

        2. Видалити перший елемент рядка.

      3. Вилучити з рядка проміжкові пробіли-дублікати.

        1. Повторювати дії, поки в рядку є підрядок, що містить два пробіли підряд:

          1. Видалити в знайденому підрядку перший із пробілів.

      4. Якщо останній елемент рядка не пробіл, то приєднати пробіл в кінець рядка.

      5. Сформувати масив слів, що містяться у поточному рядку.

        1. Повторювати дії, поки в рядку є пробіли:

          1. Слово до першого знайденого пробілу записати як черговий елемент масиву слів

          2. Видалити збережене у масиві слово і відповідний пробіл із рядка

      6. Відсортувати слова, збережені у масиві.

        1. Послідовно порівнювати пари слів і якщо їх послідовність не відповідає шуканій, переставити слова місцями.

      7. Записати масив відсортованих слів у компоненту другого файлу.

      8. Записати у кінець файлу повідомлення про кількість слів.

    4. Закрити перший файл.

    5. Закрити другий файл.

  5. Кінець.

Текст програми

program Lab_9_2;

uses Сrt;

var f1, f2: text; { заданий фaйл }

st, prom : string; { тимчасовий рядок }

n : byte; { кількість слів у рядку }

kol : word; { кількість слів у файлі }

word : array [1..20] of string; { масив слів}

i, j, k : integer; { робочі змінні }

s : char; { змінна для закінчення введення }

{--------- створення файла даних ---------------}

procedure Сreate_f1;

begin

Assign (f1, 'lab9_2.dat'); {відповідність файлової змінної файлу на диску}

Rewrite (f1); { відкриття файлу для запису }

repeat

Write ('input string of words: '); ReadLn (st); { введення рядка }

Write (f1, st); { запис рядка у файл }

WriteLn ('continue? [y/n]'); ReadLn (s);

until s = 'n'; { повторювати введення, поки не натиснута клавіша 'n' }

Close (f1); { закриття файлу }

end;

{------ виведення файлу на екран ------}

procedure Output_file (f : text);

begin

Reset (f); { відкриття файлу для читання }

while not Eof (f) do { перегляд усіх записів }

begin

ReadLn (f, st); { читання рядка }

WriteLn (st); { виведення рядка }

end;

Close (f);

end;

{--------- підготовка рядка до аналізу ---------------}

procedure Blank;

begin

while (s[1] = ' ') do

Delete (s, 1, 1); { вилучення початкових пробілів }

while Pos (' ', s) <> 0 do

Delete (s, Pos (' ', s), 1); { вилучення пробілів, що повторюються }

if s[Length (s)] <> ' ' then s := s + ' '; { додавання пробілу в кінець рядка }

end;

{--------- формування масиву слів ---------------}

procedure Forming_Words;

begin

n := 0;

while Pos (' ', st) <> 0 do

begin

n := n + 1;

word [n] := Copy (st, 1, Pos (' ', st) - 1); { формування масива слів }

Delete (st, 1, Pos (' ', st)); { вилучення слова з рядка }

end;

end;

{----- впорядкування масиву слів за алфавітом -----}

procedure Sort;

begin

for i:=1 to n-1 do

for j:=i+1 to n do

if word [i] > word [j] then

begin

prom := word [j];

word [j] := word [i];

word [i] := prom;

end;

end;

{----- створення нового файлу, що відповідає заданій умові -----}

procedure Create_f2;

begin

Assign (f2, 'new9_2.txt');

Rewrite (f2);

Reset (fl);

kol := 0;

while not Eof (f1) do

begin

ReadLn (f1, st); { зчитування рядка з першого файла }

Blank; { вилучення пробілів }

Forming_Words; { формування масиву слів }

Sort; { впорядкування масиву слів за алфавітом }

for i:=1 to n do

Write (f2, word [i], ' '); { запис слів у компоненту нового файлу }

WriteLn (f2);

kol := kol + n; { підрахунок загальної кількості слів }

end;

WriteLn (f2, 'number of words is ', kol); { запис повідомлення у файл }

Close (f1);

Close (f2);

end;

{------ основна програма -----------------}

begin

ClrScr;

WriteLn ('Result of laboratory work 9_2');

WriteLn ('variant 31');

WriteLn ('Еxecuted student of group ІС-хх Petrov');

Create_f1; { створення файлу даних }

WriteLn ('initial file:');

Output_file (f1); { виведення вихідного файлу даних }

ReadLn;

Create_f2; { створення нового файлу даних }

WriteLn('new file of text after sorting:');

Output_file (f2); { виведення нового файлу даних }

ReadLn;

end.

Відеокопія результату

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]