Помощь - Поиск - Пользователи - Календарь
Полная версия: типизированные файлы
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
natka
Есть такая задачка:
Создать типизированный файл , компоненты отдельные слова.
Отредактировать файл - если слово начинается с буква "к", заменить ее на букву "К".
я тут что - то написала, но замены не происходит, может кто-нибудь найдет ошибку.

const n=20;
var
F,F1:file of char;
i:integer;
c:char;
BEGIN
assign(F,'C:/z25.dat');rewrite(F);
for i:=1 to n do
begin
read©; write(F,c);
end;
close(F); reset(F);
assign(F1,'C:/z25_1.dat');rewrite(F1);
for i:=1 to n-1 do
begin
read(F,c);
if c='' then begin seek(F,i+1); write(F,c);
if c='k' then c:='K'; end;
write(F1,c); seek(F,i);
end;
close(F1); reset(F1);
for i:=1 to n do
begin
read(F1,c); write ( c ) ;
end;
END.



теги CODE - не html а bb коды, они пишутся в квадратных скобках.
Altair
Ozzя
Цитата
Создать типизированный файл , компоненты отдельные слова.

У тебя компоненты не отдельные слова, а отдельные символы.
natka
Если будут слова, то как проверить какая первая буква слова?
volvo
type
T = string[10]; { можно - больше }

var
f: file of T;
s: T;
...
read(f, s);
if s[1] = 'к' then ...
...
natka

const n=5;
var
F,F1:file of string[20];
i:integer;
c:string[20];
BEGIN
assign(F,'C:/z25.dat');rewrite(F);
for i:=1 to n do
begin
read©; write(F,c);
end;
close(F); reset(F);
assign(F1,'C:/z25_1.dat');rewrite(F1);
for i:=1 to n-1 do
begin
read(F,c);
if c[1]'k' then
if c='k' then c:='K';
write(F1,c);
end;
close(F1); reset(F1);
for i:=1 to n do
begin
read(F1,c); write©;
end;
END.


Только так я совсем запуталась, дайте идею.
Вдогонку: как сделать так чтобы ввод в файл прекращался по нажатию клавиши Enter, какой у нее код?

Я в принципе так и сделала - переделала свое - там ошибки, только до проверки не доходит, на этапе чтения данных из файла выдается - Типовая ошибка.

Я исправила:
Код

const n=5;
var
F,F1:file of string[20];
i:integer;
c:string[20];
BEGIN
assign(F,'C:/z25.dat');rewrite(F);
for i:=1 to n do
begin
     read(c);     write(F,c);
end;
close(F);reset(F);
assign(F1,'C:/z25_1.dat');rewrite(F1);
for i:=1 to n-1 do
begin
     read(F,c);
     if c='k' then c:='K';
     end;
     write(F1,c);
end;
end.

только все равно не работает, на этапе чтения из файла выдается ошибка - Типовая ошибка.
volvo
natka, смотри, есть несколько недочетов в программе:
1) ты привязалась к конкретному числу компонентов. Для файла это не совсем верно - с файлом надо работать, пока он не закончился.
2)
Цитата
на этапе чтения данных из файла выдается - Типовая ошибка.
- потому что тип string[20]
var
F, F1: file of string[20]; { <-- Здесь... }
i: integer;
c: string[20]; { <-- ... и здесь }
для компилятора не имеет ничего общего!!! Я не зря выделил это в отдельное описание типа, это очень распространенная ошибка, и избежать ее можно ЛИБО используя встроенный тип string (без объявления длинны), ЛИБО определяя свой тип, и работая только с ним...

Вот рабочий вариант программы (только исправь пути к файлам...)
type
T = string[20];

var
f, f1: file of T;
s: T;

BEGIN
assign(F,'z25.dat'); rewrite(F);
repeat
readln(s);
if s <> '' then write(F, s);
until s = '';

reset(F);
assign(F1,'z25_1.dat'); rewrite(F1);
while not eof(f) do begin
read(F, s);
if s[1] = 'k' then s[1] := 'K';
write(F1, s);
end;
reset(F1);
while not eof(f1) do begin
read(F1, s); write(s, ' ');
end;
close(f); close(f1);
END.
natka
Спасибо, все работает.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.