Робота з текстовими файлами free pascal

Пропускає все прогалини, символи Tab і EOL до тих пір, поки не зустріне перший значущий символ або EOF. Повертає True при досягненні EOF

Досить часто можна почути пораду: "Щоб уникнути помилок при роботі з файлами, дані з файлу треба зчитувати таким же чином, як вони і запісива- лись". На жаль, при роботі з текстовими файлами ця порада не завжди приводить до правильних результатів. Про це свідчить програма з лістингу 10.2.

Лістинг 1 0 .2. програма txt_inout

program txt_inout; var

j, k1, k2: integer; f: text;

a: string = 'Рядок'; b: string;

for j: = 1 to 10 do begin

close (f); writeln; reset (f);

for j: = 1 to 10 do begin

У цьому можна переконатися, переглядаючи вміст файлу після роботи про- грами. Але до кінця програма не допрацьовує, т. К. На 21 рядку при першому ж зчитуванні з файлу фіксується помилка з видачею повідомлення:

Error 106. Invalid numeric format

Вся справа в тому, що першою змінною в списку введення є змінна b типу String, і її максимальна довжина дорівнює 255 байтам. Тому з файлу в змінну b зчитується перший рядок повністю, а при читанні числового значення в змінну k1 виявляється неприпустимий символ, розташований на початку другого рядка. Ситуацію можна виправити, обмеживши максимальну довжину змінною b:

Після такого виправлення результат роботи програми виглядає так, як і належить:

Running "c: \ fpc \ myprog \ txt_inout.exe" Рядок 1 2

Лістинг 10.3. програма indent

program indent; var

f1, f2: text; name1, name2: string; k, n: integer;

while not eof (f1) do begin

readln (f1, str); writeln (f2, '': n, str);

if ParamCount <3 then begin

writeln ( 'Помилка при запуску. Повинно бути:'); writeln ( 'indent файл1 файл2 зрушення');

Після запуску програми з командного рядка:

> Txt_inout 3.txt 4.txt 5

Робота з текстовими файлами free pascal

Мал. 10.1. Зрушення вмісту в текстовому файлі

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

б одним пропуском. Кількість параметрів можна витягти з системної змінною ParamCount. Значення параметрів представлені в символьному вигляді массі- вом рядків, звідки їх можна витягати за допомогою функції ParamStr. Так як в нашому випадку останній параметр представляє число (кількість прогалин, що вставляється на початку кожного рядка), то його доводиться перетворювати в число-виття машинний формат за допомогою процедури Val. Зверніть увагу на конст- рукцію виду '': n, використану при записі в файл. Вона задає записується значення, яке складається з єдиного пропуску, але крім цього містить указу- ня, що під виведене значення відводиться поле з n позицій. Виведений пробіл притискається до правої межі цього поля, а все лідируючі позиції також за- полнять пробілами.

Схожі статті