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

За вознаграждение или нахаляву (если повезёт)

Модераторы: Хыиуду, MOTOCoder, Medved, dr.Jekill

Ответить
skynet
Сообщения: 1
Зарегистрирован: 23 фев 2007, 09:44

23 фев 2007, 09:47

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

Буду благодарен за исходный код программы [Pascal].
Аватара пользователя
Колядин Максим
Сообщения: 285
Зарегистрирован: 16 ноя 2006, 19:09
Откуда: Seattle, WA
Контактная информация:

24 фев 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.
Программист - это человек, который решает способом, который вы не понимаете, проблемы, о которых вы даже не подозревали...
Хыиуду
Сообщения: 2388
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

24 фев 2007, 12:09

По-моему, №3 делается так:
readln(s);
writeln(s);
Ошибок тут возникнуть все равно не может. Только непонятно, при чем тут файл.
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Аватара пользователя
Колядин Максим
Сообщения: 285
Зарегистрирован: 16 ноя 2006, 19:09
Откуда: Seattle, WA
Контактная информация:

24 фев 2007, 15:32

Сообщение от Хыиуду
Только непонятно, при чем тут файл.
Обрати внимание, писал в 3 часа ночи, спешил и по-привычке написал var f: fille. Надеюсь, зная что речь идёт о текстовых файлах, он поймёт, что переменная F должна иметь тип text...
Программист - это человек, который решает способом, который вы не понимаете, проблемы, о которых вы даже не подозревали...
Philin
Сообщения: 6
Зарегистрирован: 21 фев 2007, 07:10

26 фев 2007, 07:29

Хыиуду писал(а):По-моему, №3 делается так:
readln(s);
writeln(s);
Ошибок тут возникнуть все равно не может. Только непонятно, при чем тут файл.
Это как я понимаю вводиться номер строки в файле, а потом эта строка из файла. Ошибка возможна если нет такой строки
Хыиуду
Сообщения: 2388
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

26 фев 2007, 10:23

Ну так тогда и надо писать: вывести строку в файле, номер которой задан пользователем.
{открытие файла}
try
for i:=1 to num do readln(f,s);
except
s:='Строки с таким номером в файле нет';
finally
writeln(s);
end;
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Аватара пользователя
Колядин Максим
Сообщения: 285
Зарегистрирован: 16 ноя 2006, 19:09
Откуда: Seattle, WA
Контактная информация:

27 фев 2007, 01:10

Хыиуду писал(а):try
for i:=1 to num do readln(f,s);
except
s:='Строки с таким номером в файле нет';
finally
writeln(s);
end;
Хыиуду, а что это за Try, expect, finally. Никогда не сталкивался с такими процедурами...
Программист - это человек, который решает способом, который вы не понимаете, проблемы, о которых вы даже не подозревали...
Хыиуду
Сообщения: 2388
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

27 фев 2007, 11:15

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

Код: Выделить всё

Попытаться выполнить
for i:=1 to num do readln(f,s);
Если при выполнении предыдущего блока возникла ошибка, закончить его выполнение и выполнить
s:='Строки с таким номером в файле нет';
После окончания обоих блоков (не важно, произошла ли в первом ошибка, или нет), выполнить
writeln(s);
end;
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Аватара пользователя
Колядин Максим
Сообщения: 285
Зарегистрирован: 16 ноя 2006, 19:09
Откуда: Seattle, WA
Контактная информация:

27 фев 2007, 15:32

Понятно. В паскале таких процедур нет...
Программист - это человек, который решает способом, который вы не понимаете, проблемы, о которых вы даже не подозревали...
Аватара пользователя
somewhere
Сообщения: 1837
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

27 фев 2007, 16:38

&quot писал(а):Понятно. В паскале таких процедур нет...
Это собственно не процедуры, а директивы компилятора, т.с. Predefined keywords - но все-равно оффтоп получается ;-)
It's a long way to the top if you wanna rock'n'roll
Ответить