Помощь - Поиск - Пользователи - Календарь
Полная версия: Определение длины строки в текстовом файле
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Katya
Найти максимальную длину строки в текстовом файле и. распечатать все строки файла, имеющие такую длину.
Помогите, пожайлуста, решить задачу!!! Заранее благодарю!!!!
Tan
uses crt;
Const filename = 'MyFile.txt';
var f : TEXT;
S : string;
max,a : integer;
begin
Clrscr;
assign (f,filename);
reset (f);
max:=0;
while not eof(f) do
begin
readln (f,s);
If Length(s) >= max then max:=Length(s);
end;
writeln (max);
reset (f);
while not eof(f) do
begin
readln (f,s);
if Length(s) = max then writeln (S);
end;
Close (f);
readkey;
end.

volvo
Первая реализация программы, делающей то, что указано в задании за ОДИН проход по файлу - "+" в репутацию от меня... blum.gif
klem4
Массивами/списками итд пользоваться естественно нельзя ?
volvo
Естественно...
Tan
А вообще можно так сделать : Напечатать все строки на экране потом оттуда через видео проверять сколько символов в каждой из них. Тут уже будет 2 прохода но не по файлу =) Потом через СРТ удалять ненужные. Или через граф также вывести чтроки красным цветом потом брать каждую строку и черпать цвет пикселя, у кого больше наберётся проверок, с той длиной и сравнивать, боюсь если даже это возможно я не реализую.
klem4
Цитата
А вообще можно так сделать : Напечатать все строки на экране потом оттуда через видео проверять сколько символов в каждой из них. Тут уже будет 2 прохода но не по файлу =) Потом через СРТ удалять ненужные. Или через граф также вывести чтроки красным цветом потом брать каждую строку и черпать цвет пикселя, у кого больше наберётся проверок, с той длиной и сравнивать, боюсь если даже это возможно я не реализую.


это фактически использование массива, так что не прокатит, я тоже подумал сначала про видеопамять.
мисс_граффити
program text_file;
uses crt;
var f: text;
max: integer;
s:string;
begin
max:=0;
assign(f,'c:\fil.txt');
reset(f);
while not eof(f) do
begin
readln(f,s);
if length(s)>max then
begin
clrscr;
max:=length(s);
end;
if max=length(s) then
writeln(s);
end;
readln;
close(f);
end.

хотя, пожалуй, трактовка задания получилась весьма вольной - распечатываются не только нужные строки.
volvo
Цитата
распечатываются не только нужные строки
Не пойдет... Если длина строк пойдет по возрастающей, то вообще распечатается весь файл... Распечатываться должны ТОЛЬКО строки с макс. длиной...
klem4
Цитата
Не пойдет...


Почему ? Вроде все верно работает ...

для
1
12
123

печатает 123

.. clrscr решает smile.gif

или как раз в нем и загвоздка ? Фактически то печатается все, просто потом стирается ?
volvo
Ну, тогда что, решение при котором цвет неподходящих строк устанавливается цветом фона - тоже верно?... Мне так не кажется.. Сорри... Вопрос снят...
klem4
uses crt;

var
f: Text;
s, temp: String;
max: integer;

begin
clrscr;
assign(f, 'text.txt');
reset(f);
temp := '';
max := 0;
while not(eof(f)) do begin
readln(f, s);
if length(s) > max then begin
temp := '';
max := Length(s);
end;
if length(s) = max then temp := temp + s + #10#13;
end;
writeln(temp);
readln;
end.


хотя ограничение 255 ....((((( Но можно юзать PCHAR

не, это все не то конечно ...
Malice
Не понял, в чем фишка, решение напрашивается очевидное:
uses crt;
var f:text;
var m:byte;
procedure q(var m:byte);
var s:string;
begin
if not eof (f) then begin
readln(f,s);
if m<length(s) then m:=length(s); q(m);
end;
if eof (f) and (length(s)=m) then writeln (s);
end;

begin
clrscr;
assign (f,'text.txt'); reset (f);
m:=0;
q(m);
close (f);
end.

Конечно, это не до конца правильно (порядок я имею ввиду), чтобы это исправить придется так на мостик встать, что я и не сображу что-то пока smile.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.