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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.11.2008, 03:20   #1
Maximauzer
 
Регистрация: 17.11.2008
Сообщений: 3
Вопрос Программа печати текстового файла

Господа форумчане, выручайте!
Ситуация такова: Зачисляюсь у универ на заочку по академ. справке на 3-й курс. Сессия уже идет, а мне надо 5 хвостов из разницы в уч. планах снять за 5!!! дней(((. Один из них - "прогр. на яз. высокого уровня (ТР7)", куда входит курсовая. Пытался изучить ТР за 3 недели (на специальности он идет 2 курса), но увы ... Общие принципы, вроде, усвоил, но правильно составить прогу ... В общем, помогите пожалуйста влиться в уч. процесс! От вашей помощи, возможно, зависит, буду я программистом и, также как и вы, помогать другим нуждающимся на форуме, либо так неучем и останусь((
(Специальность "Автоматизированные системы обработки информации и управления")

Вот задание:

Разработать программу печати текстового файла с размещением текста по 72 символа в строку с переносом в месте разрыва слова и печатью каждого предложения с красной строки (5 пробелов в начале строки). Предусмотреть проверку существования исходного файла и формирование страниц с нумерацией страниц (в первой строке страницы). Длина страницы должна составлять 50 строк.

Помогите, пожалуйста...
Maximauzer вне форума Ответить с цитированием
Старый 18.11.2008, 19:25   #2
alex_fcsm
Участник клуба
 
Аватар для alex_fcsm
 
Регистрация: 10.11.2008
Сообщений: 1,502
По умолчанию

Цитата:
Сообщение от Maximauzer Посмотреть сообщение
Пожалуйста, ответьте хоть как-нибудь, ждать мне помощи здесь или нет? Может неправильно написал что-то...
Иди во фриланс
Нормальное состояние техники - нерабочее, все остальное частный случай.
alex_fcsm вне форума Ответить с цитированием
Старый 22.11.2008, 03:53   #3
Maximauzer
 
Регистрация: 17.11.2008
Сообщений: 3
По умолчанию

Вот, нацарапал программку... Форматирует текст из файла-назначения и записывает результат в целевой файл:

PHP код:
Program Text_Format;

Uses
     Crt
;

Var
     
FSource:text;
     
FDist:text;
     
InPut:String;
     
FileNameSource:String;            {*©«-Ёбв®з*ЁЄ}
     
FileNameDist:String;              {–Ґ«Ґў®© д*©«}
     
i,j,page:integer;
     
c:char;

Label
     startpage
endoffileendofline;

begin

    
{  FileNameSource:='C:\Max\TextEdit\Source.txt'; }

    
Write('‚ўҐ¤ЁвҐ Ё¬п д*©«*:   ');           {‚ў®¤ Ё¬Ґ*Ё д*©«*-Ёбв®з*ЁЄ*}
    
ReadLn(InPut);

    
FileNameSource:='E:\WORK_TP\'+InPut;

    Assign(FSource,FileNameSource);

    {$i-}                                     {ЋвЄ«оз*Ґ¬ Є®*ва®«м ®иЁЎ®Є ўў®¤*-ўлў®¤*}
    Reset(FSource);                           {ЋвЄалў*Ґ¬ аҐ¤*ЄвЁа㥬멠д*©«}
    {$i+}                                     {‚Є«оз*Ґ¬ Є®*ва®«м ®иЁЎ®Є ўў®¤*-ўлў®¤*}

    If IoResult <> 0 then begin               {Љ®*ва®«м **«ЁзЁп д*©«*-Ёбв®з*ЁЄ*}
       ClrScr;
       Write('
ЋиЁЎЄ*! *©« *Ґ **©¤Ґ*!'#13#10'Ќ*¦¬ЁвҐ «оЎго Є«*ўЁиг...');
       ReadLn;
       Exit;
    end;

    FileNameDist:='
E:\WORK_TP\Dist.txt';      {Ќ*§**з*Ґ¬ Ё¬п жҐ«Ґў®Ј® д*©«*}
    Assign(FDist,FileNameDist);
    Rewrite(FDist);

    page:=1;                                  {Ќ®¬Ґа вҐЄг饩 бва**Ёжл}

startpage:

    For i:=1 to 30 do
        Write(FDist, ' ');

    WriteLn(FDist,'
-----  ', page, '  -----');
    WriteLn(FDist);

    For j:=1 to 50 do begin                    {‘зҐвзЁЄ бва**Ёж}

        For i:=1 to 72 do begin                {‘зҐвзЁЄ бва®Є}

            If EOF(FSource) then               {Џа®ўҐаЄ* Є®*ж* д*©«*}
               Goto endoffile;

            Read(FSource, c);

            If c < ' ' then                    {?Ј*®аЁа㥬 гЇа*ў«пойЁҐ бЁ¬ў®«л}
               Continue;

            If c = '
.' then begin              {?¤Ґ*вЁдЁЄ*в®а Є®*ж* ЇаҐ¤«®¦Ґ*Ёп}

               Write(FDist, c);

               If Seekeof(FSource) then        {Ќ*宦¤Ґ*ЁҐ б«Ґ¤го饣® §**зЁ¬®Ј® бЁ¬ў®«*}
                  If EOF(FSource) then         {Џа®ўҐаЄ* Є®*ж* д*©«*}
                     Goto endoffile;

               WriteLn(FDist);
               Write(FDist, '     ');          {Ља*б**п бва®Є*}

               Goto endofline;
            end;

            Write(FDist, c);

        end;

        Read(FSource,c);

        While c <> ' ' do begin                {‚лЇ®«*пҐвбп ¤® Їа®ЎҐ«*}

            If EOF(FSource) then               {Џа®ўҐаЄ* Є®*ж* д*©«*}
               Goto endoffile;

            Read(FSource, c);

            If c < ' ' then                    {?Ј*®аЁа㥬 гЇа*ў«пойЁҐ бЁ¬ў®«л}
               Continue;

            If c = '
.' then begin              {?¤Ґ*вЁдЁЄ*в®а Є®*ж* ЇаҐ¤«®¦Ґ*Ёп}

               Write(FDist, c);

               If Seekeof(FSource) then        {Ќ*宦¤Ґ*ЁҐ б«Ґ¤го饣® §**зЁ¬®Ј® бЁ¬ў®«*}
                  If EOF(FSource) then         {Џа®ўҐаЄ* Є®*ж* д*©«*}
                     Goto endoffile;

               WriteLn(FDist);
               Write(FDist, '     ');          {Ља*б**п бва®Є*}

               Goto endofline;
            end;

            Write(FDist, c)

        end;

        WriteLn(FDist);

endofline:

   end;

   WriteLn(FDist);
   WriteLn(FDist);

   page:=page+1;                               {“ўҐ«ЁзЁў*Ґ¬ бзҐвзЁЄ бва**Ёж ** 1}

   goto startpage;

endoffile:

   Close(FSource);
   Close(FDist);

   Write('
ђҐ¤*ЄвЁа®ў**ЁҐ §*Є®*зҐ*®.'#13#10'ђҐ§г«мв*в §*ЇЁб** ў д*©« DIST.TXT.'#13#10'Ќ*¦¬ЁвҐ «оЎго Є«*ўЁиг...');
   ReadLn;
end. 
Но есть проблемки.
1) Печать с красной строки: перенос осуществляется везде после точки. Понимаю, что надо сделать так, чтоб программа переносила текст после двух символов подряд - точки и пробела, но не знаю как...
2) Перенос осуществляется после того, как в строке набегает 72 символа после пробела, т.е. получается больше, чем 72. И, почему-то, пропадают некоторые буквы из слов, заканчивающих строку ...

Помогите, пожалуйста, справиться с этими багами...

P.S. Текст копировал из .PAS, крякозябры - кириллица DOS...
Maximauzer вне форума Ответить с цитированием
Старый 22.11.2008, 09:01   #4
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,515
По умолчанию

при обычном выводе мы добавляем один знак так и работает контроль длиные строки for j:=1 to 72
при выводе красной строки сразу добавляем несколько что контроль никакне учитывает.
какк исправить.

заменить цикл на j:=1; while j<72
при выводе учитывать количество вывода j:=j+сколько надо;

вполне возможно данная рекомендация исправит и потери символов в конце строки если у нее таже причина.
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 23.11.2008, 02:00   #5
Maximauzer
 
Регистрация: 17.11.2008
Сообщений: 3
По умолчанию

Спасибо, попробую. А про точку с пробелом ничего не подскажете?
Maximauzer вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача на анализ текстового файла Latedelivery Паскаль, Turbo Pascal, PascalABC.NET 4 31.10.2008 10:55
Delphi Редактирование текстового файла Starscream Общие вопросы Delphi 11 18.02.2008 17:15
Открытие текстового файла Victor Microsoft Office Excel 2 16.01.2008 03:42
Чтение пунктов TreeView из текстового файла DEVDITS Компоненты Delphi 2 20.05.2007 21:49