Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Определение длины строки в текстовом файле

Автор: Katya 6.04.2007 14:57

Найти максимальную длину строки в текстовом файле и. распечатать все строки файла, имеющие такую длину.
Помогите, пожайлуста, решить задачу!!! Заранее благодарю!!!!

Автор: Tan 6.04.2007 15:27

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 6.04.2007 15:32

Первая реализация программы, делающей то, что указано в задании за ОДИН проход по файлу - "+" в репутацию от меня... blum.gif

Автор: klem4 6.04.2007 15:38

Массивами/списками итд пользоваться естественно нельзя ?

Автор: volvo 6.04.2007 15:39

Естественно...

Автор: Tan 6.04.2007 15:44

А вообще можно так сделать : Напечатать все строки на экране потом оттуда через видео проверять сколько символов в каждой из них. Тут уже будет 2 прохода но не по файлу =) Потом через СРТ удалять ненужные. Или через граф также вывести чтроки красным цветом потом брать каждую строку и черпать цвет пикселя, у кого больше наберётся проверок, с той длиной и сравнивать, боюсь если даже это возможно я не реализую.

Автор: klem4 6.04.2007 15:46

Цитата
А вообще можно так сделать : Напечатать все строки на экране потом оттуда через видео проверять сколько символов в каждой из них. Тут уже будет 2 прохода но не по файлу =) Потом через СРТ удалять ненужные. Или через граф также вывести чтроки красным цветом потом брать каждую строку и черпать цвет пикселя, у кого больше наберётся проверок, с той длиной и сравнивать, боюсь если даже это возможно я не реализую.


это фактически использование массива, так что не прокатит, я тоже подумал сначала про видеопамять.

Автор: мисс_граффити 6.04.2007 15:49

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 6.04.2007 15:56

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

Автор: klem4 6.04.2007 15:59

Цитата
Не пойдет...


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

для
1
12
123

печатает 123

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

или как раз в нем и загвоздка ? Фактически то печатается все, просто потом стирается ?

Автор: volvo 6.04.2007 16:04

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

Автор: klem4 6.04.2007 16:04

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 7.04.2007 12:04

Не понял, в чем фишка, решение напрашивается очевидное:

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