PDA

Просмотр полной версии : Помогите составить программу работающую с текстовым файлом...



skynet
23.02.2007, 09:47
Задача программы [Pascal]:
1. Программа дополняет существующие файлы информацией;
2. Выводит на экран существующие файлы;
3. Выводит на экран строку, заданную пользователем (предусмотреть защиту от ошибок);

Буду благодарен за исходный код программы [Pascal].

Колядин Максим
24.02.2007, 03:18
1. Программа дополняет существующие файлы информацией;
Здесь удобнее было бы процедеру, дополняющую соответствующую информацию. info - переменная типа string, содержащая информацию. S - тоже имеет тип string. Она содержит имя связывымаго на внешнем носителе файла.


uses crt, WinDos;
var info, s: string;
di: TSearchRec;
f: text;
procedure add_information;
begin
s:=di.name;
assign(f,s);
append(f);
writeln(f, info);
close(f);
end;

begin
clrscr;
write('Введите информацию которую нужно добавить: ');
readln(info);
findfirst('*.txt', faAnyfile, di);
if DosError=0 then add_information;
while DosError=0 do begin
findnext(di);
add_information;
end;
end.


2. Выводит на экран существующие файлы;
2. Здесь также используется модуль WinCrt.


uses crt, windos;
var di: TSearchRec;
begin
clrscr;
findfirst('*.txt', faAnyFile, di);
while DosError=0 do begin
writeln(di.name);
findnext(di);
end;
readkey;
end.


3. Выводит на экран строку, заданную пользователем (предусмотреть защиту от ошибок);


uses crt;
var f: file;
i,pos: integer;
s: string;
begin
assign(f, 'stroka.txt'); {$I-}reset(f);{$I+}
if IOResult<>0 then write('Файл не существует.');
write('Введите номер строки: ');
readln(pos);
for i:= 1 to pos do readln(f,s);
while not eoln(f) do begin
read(f,s);
write(s);
end;
readkey;
end.

Хыиуду
24.02.2007, 12:09
По-моему, №3 делается так:
readln(s);
writeln(s);
Ошибок тут возникнуть все равно не может. Только непонятно, при чем тут файл.

Колядин Максим
24.02.2007, 15:32
Сообщение от Хыиуду
Только непонятно, при чем тут файл.
Обрати внимание, писал в 3 часа ночи, спешил и по-привычке написал var f: fille. Надеюсь, зная что речь идёт о текстовых файлах, он поймёт, что переменная F должна иметь тип text...

Philin
26.02.2007, 07:29
По-моему, №3 делается так:
readln(s);
writeln(s);
Ошибок тут возникнуть все равно не может. Только непонятно, при чем тут файл.

Это как я понимаю вводиться номер строки в файле, а потом эта строка из файла. Ошибка возможна если нет такой строки

Хыиуду
26.02.2007, 10:23
Ну так тогда и надо писать: вывести строку в файле, номер которой задан пользователем.
{открытие файла}
try
for i:=1 to num do readln(f,s);
except
s:='Строки с таким номером в файле нет';
finally
writeln(s);
end;

Колядин Максим
27.02.2007, 01:10
try
for i:=1 to num do readln(f,s);
except
s:='Строки с таким номером в файле нет';
finally
writeln(s);
end;
Хыиуду, а что это за Try, expect, finally. Никогда не сталкивался с такими процедурами...

Хыиуду
27.02.2007, 11:15
Вот сейчас не скажу точно, есть ли это в Паскале или нет, в Дельфи точно есть. Это процедуры обработки прерываний. Выглядит это так:


Попытаться выполнить
for i:=1 to num do readln(f,s);
Если при выполнении предыдущего блока возникла ошибка, закончить его выполнение и выполнить
s:='Строки с таким номером в файле нет';
После окончания обоих блоков (не важно, произошла ли в первом ошибка, или нет), выполнить
writeln(s);
end;

Колядин Максим
27.02.2007, 15:32
Понятно. В паскале таких процедур нет...

somewhere
27.02.2007, 16:38
Понятно. В паскале таких процедур нет...
Это собственно не процедуры, а директивы компилятора, т.с. Predefined keywords - но все-равно оффтоп получается ;-)