Форум «Всё о Паскале» _ Задачи _ чтение чисел из файла...
Автор: compiler 12.05.2007 23:14
Добрый день! надо написать программу выполняющую чтение из текстового файла целых чисел и вывод на печать только четных чисел. собственно вот...
Var f : text; Put : string; a : integer; Begin Put := 'D:\-stas\del\fi1.txt'; assign(f, Put); reset(f); while not Eof(f) do begin readln(f, a); if not odd(a) then writeln(a); end; close(f); readln End.
теперь хотелось бы внести не большие изменения 1) можно ли вместо Полного пути к файлу использовать путь из текущей деректории? 2) можно ли обрабатывать не только первые числа в строке, а все... по идее должно быть как-то так..
... while not Eof(f) do begin while not eoln do begin readln(f, a); if not odd(a) then writeln(a); end; end; ...
но ведь загвостка, как я понимаю в том что межну числами числами может быть разное количество отступов(а приведенная программа их вообще не обрабатывает) , может надо читать из файла строку пока не будет разделителя, а потом преабразововать в число? помогите пожалуйста...
Автор: volvo 12.05.2007 23:49
Цитата
но ведь загвостка, как я понимаю в том что межну числами числами может быть разное количество отступов(а приведенная программа их вообще не обрабатывает)
А программа и не должна их обрабатывать... Это делает процедура Read... Если ты напишешь Read(f, a, b) и в файле f будут 2 числа, разделенные десятью пробелами, то они корректно прочитаются. Смотри (программа читает и печатает ВСЕ числа...):
var f: text; a: integer;
begin assign(f, 'aa.txt'); reset(f); while not seekeof(f) do begin if seekeoln(f) then begin readln(f); writeln; end; read(f, a); write(a:5); end; close(f); end.
файл aa.txt лежит в той же папке, что и EXE, и содержит:
12 15 23 77 11 <пустая строка>
Автор: compiler 13.05.2007 19:25
Спасибо... если б еще коментарии... например разницу между seekeof и Eof...
Автор: volvo 13.05.2007 19:44
А разница - в том, что SeekEof (в отличии от Eof) видит конец файла "сквозь" все пробельные символы (пробелы, и табуляцию), и если от текущей позиции до конца файла остались только пробельные символы, то SeekEof вернет True (значащих для нее символов в файле больше нет), а Eof - вернет False, потому что хоть что-то еще можно прочесть.
Добавлено через 1 мин. То же самое, кстати, справедливо и в отношении Eoln/SeekEoln, SeekEoln "не видит" пробельных символов...
Автор: compiler 13.05.2007 20:17
еще один вопрос... а как переходить на деректорию(или несколько) вверх и проверять является ли текущая деректория корневой?
например если нам надо считать этот файл с корневого каталога текущего диска?
Автор: volvo 13.05.2007 20:29
var s: string;
getdir(0, s); { <--- Вот это... }
... вернет тебе текущую папку диска.
Хотя мне кажется, ты заходишь не с той стороны. Не проще было бы определишь текущий диск, и в его корневой папке открывать файл с заданным именем?
Автор: compiler 13.05.2007 20:35
Цитата(volvo @ 13.05.2007 16:29)
Не проще было бы определишь текущий диск,
а если мы его не знаем?
и как создавать свою директорию?
Автор: volvo 13.05.2007 21:15
Цитата
а если мы его не знаем?
тогда делаем GetDir с первым параметром = 0 (как я показал), и смотрим на первый символ строки s.