Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.12.2012, 01:59   #1
afro13
Новичок
Джуниор
 
Регистрация: 08.12.2012
Сообщений: 6
По умолчанию процедура sort_file

Используя готовую процедуру sort_file ,составить программу сортировки текстового файла с размещением строк в пределах каждой страницы в алфавитном порядке по первому слову строки.Предусмотреть проверку существования исходного файла и переход на новую страницу с формированием номера страницы.Длинна страницы составляет 60 строк.
afro13 вне форума Ответить с цитированием
Старый 08.12.2012, 07:59   #2
TinMan
Форумчанин
 
Аватар для TinMan
 
Регистрация: 05.09.2011
Сообщений: 869
По умолчанию

Читаешь файл в цикле порциями по 60 строк. В теле цикла записываешь эти 60 строк в другой файл, временный, открытый процедурой rewrite. Этот временный файл скармливаешь системной утилите sort (как я понял, речь о ней). Затем читаешь из него построчно, записывая параллельно в другой файл (результат, с уникальным именем). После окончания цикла уничтожаешь входной файл, а также временный, а файл-результат переименовываешь, чтоб он назывался как входной.
Все.

Да, забыл: еще номер страницы надо считать и приписывать с низу (видимо, так)
Предпочитаю на "ты".

Последний раз редактировалось TinMan; 08.12.2012 в 08:03.
TinMan вне форума Ответить с цитированием
Старый 08.12.2012, 10:42   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А каково описание этой sort_file?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 08.12.2012, 14:22   #4
afro13
Новичок
Джуниор
 
Регистрация: 08.12.2012
Сообщений: 6
По умолчанию вот она

Код:
UNIT s_text; {Модуль-процедура sort_file}

interface
procedure sort_file(var f:text;r:Boolean);
implementation
procedure sort_file; {Сортировка текстового файла}
{r=false - по убыванию, true - по возрастанию}
var f1,f2:text;b,b1,b2:string;i,i1,i2,p:Boolean;k:integer;
function more_less(x,y:string;ord:Boolean):Boolean;
begin if ord then more_less:=(x<y) 
else more_less:=(x>=y) 
end { more_less};
procedure read_str(var t:text;var buf:string;var big:Boolean);
var s:string;
begin s:=buf;readln(t,buf);if (buf=s) then big:=false
else big:=more_less(buf,s,r);
end { read_str};

procedure write_str(var t:text;buf:string;var int:Boolean);
begin if not int then writeln(f,buf);if eof(t) then int:=true 
end { write_str};

BEGIN {sort_file} assign(f1,'F1');assign(f2,'F2');
repeat {разделение на 2 файла}reset(f);rewrite(f1);rewrite(f2);
k:=1;readln(f,b);writeln(f1,b);while not eof(f) do
begin read_str(f,b,i);if i then k:=k+1;if odd(k)
then writeln(f1,b) else writeln(f2,b)
end;{конец разделения} p:=r;i1:=false;i2:=false;if k>1 then
begin {слияние файлов} rewrite(f);reset(f1);reset(f2);
readln(f1,b1);readln(f2,b2);if more_less(b1,b2,p)
then write_str(f1,b1,i1) else write_str(f2,b2,i2);
repeat if more_less(b1,b2,p) then if not eof(f1)
then begin read_str(f1,b1,i1);if i1 then p:=not p;i1:=false end
else p:=not p else if not eof(f2)
then begin read_str(f2,b2,i2);if i2 then p:=not p;i2:=false end
else p:=not p;
if more_less(b1,b2,p) then write_str(f1,b1,i1)
else write_str(f2,b2,i2);
until (i1 and i2);
end{конец слияния файлов};
until(k<=2);close(f);close(f1);close(f2);erase(f1);erase(f2) ;
END{sort_file};
END{s_text}.

program sort_page; { Сортировка текстового файла по страницам}
uses s_text;
var f,f_page,outf:text;{Файлы входной, страница и выходной}
s,c,nm:string; p,pg,count,j:byte;

begin {Ввод имени файла и открытие файла f}
repeat writeln('Введите имя исходного файла:');readln(nm);
assign(f,nm);{$I-}reset(f);{$I+}
if IOResult <>0 then
begin writeln('Ошибка в имени файла');nm:='' end;
until not (nm=''){Конец открытия файла f};
assign(f_page,'F_P');assign(outf,'OUTF');rewrite(outf);pg:=0 ;
repeat rewrite(f_page);p:=0;
{ Формирование страницы}
repeat readln(f,s);count:=0;
for j:=1 to length(s) do
if upcase(s[j]) in ['A'..'Z'] then inc(count);
str(count:2,c);s:=c+s;writeln(f_page,s);inc(p);
until (p=8) or eof(f);
inc(pg); for j:=1 to 30 do write(outf,' ');
writeln(outf,'-',pg,'-'); 
sort_file(f_page,true) { Конец формирования страницы};
reset(f_page); {Перепись страницы в outf}
repeat readln(f_page,s);delete(s,1,2);writeln(outf,s);
until eof(f_page);writeln(outf,#12){ Конец переписи} ;
until eof(f); close(outf);close(f_page);erase(f_page);
end{sort_page}.

Последний раз редактировалось afro13; 08.12.2012 в 21:49.
afro13 вне форума Ответить с цитированием
Старый 08.12.2012, 14:25   #5
afro13
Новичок
Джуниор
 
Регистрация: 08.12.2012
Сообщений: 6
По умолчанию

вот само описание...помогите если сможете...
afro13 вне форума Ответить с цитированием
Старый 08.12.2012, 15:18   #6
MihalNik
МегаМодератор
СуперМодератор
 
Регистрация: 27.11.2012
Сообщений: 5,657
По умолчанию

Цитата:
а можно подробнее и желательно на паскале пожалуйста?)
Вы думаете легко прочитать код через пост выше?
Оформите его пожалуйста: нажмите Правка, выделите текст кода, нажмите кнопочку '#' (она справа).
И еще желательно разбейте операторы по отдельным строкам и отступы тоже неплохо было бы.
Так достаточно подробно? Извините, на Паскале не знаю как это выразить

[offtop]Может есть где-нибудь простенькая утилита/веб сервис для подобного форматирования?[/offtop]
Благими намерениями устлана дорога на programmersforum.ru

Последний раз редактировалось MihalNik; 08.12.2012 в 21:17.
MihalNik вне форума Ответить с цитированием
Старый 08.12.2012, 21:00   #7
afro13
Новичок
Джуниор
 
Регистрация: 08.12.2012
Сообщений: 6
По умолчанию

а можно подробнее и желательно на паскале пожалуйста?)
afro13 вне форума Ответить с цитированием
Старый 09.12.2012, 04:02   #8
TinMan
Форумчанин
 
Аватар для TinMan
 
Регистрация: 05.09.2011
Сообщений: 869
По умолчанию

Цитата:
Сообщение от MihalNik Посмотреть сообщение
Может есть где-нибудь простенькая утилита/веб сервис для подобного форматирования?
Системной утилиты sort недостаточно?
Предпочитаю на "ты".
TinMan вне форума Ответить с цитированием
Старый 09.12.2012, 10:57   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Системной утилиты sort недостаточно?
В паскале?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 09.12.2012, 15:09   #10
TinMan
Форумчанин
 
Аватар для TinMan
 
Регистрация: 05.09.2011
Сообщений: 869
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
В паскале?
В DOS/Windows ))
В командной строке.
Предпочитаю на "ты".
TinMan вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
процедура KateMM Помощь студентам 6 12.03.2012 22:33
процедура Alex_12Proxy Паскаль, Turbo Pascal, PascalABC.NET 0 27.02.2012 16:43
Процедура на С++ Марик73 Помощь студентам 0 01.12.2011 20:28
Процедура в процедура в C++ Builder Ecosasha C++ Builder 2 06.06.2009 17:17