Другое > Hard'n'Soft
Вспоминаем Turbo Pascal и решаем задачи на нём
<< < (12/15) > >>
igarexa:
Это снова я..  :-\
Ребята, тут написал программу с обработкой файлов, но столкнулся с 2 проблемами.
Цель: В программу ввести вводный файл, сделать его обработку, и результат вывести в другой текстовой файл. Если в вводном файле есть слова "begin" или "BEGIN", то перед данной строкой в выводном файле сделать 2 пустые строки.

С файлами я разобрался, и поиском слов "бегин" тоже, но, по неизвестной причине, все строчки, которые не имеют слов "бегин", не выводятся в выводной файл. а выводится лишь те, где они имеются.
И ещё один момент. Я могу дописать текст, перед словами "бегин", но не получается пропускать строки.

Выложу программу для наглядности.
http://2file.ru/f4ad64258223
Ну а вот и сам код:
program Lab1;
uses CRT;

  var
InpFile,        {vvodnij fajl}
OutFile   :TEXT;      {vivodnoj fajl}

 InputString, OutputString : string;
 OutfileName: string;
 CONST
 InpFileName='Lab1Inp.txt';
 label TESTING, ENDING;


begin
  Assign(InpFile, InpFileName );  {vvodnoj fajl }
  Reset(InpFile);
  writeln(' vvedi nazvanie vivodnogo fajla');
  readln(OutFileName);
  assign(OutFile, OutFilename);   { vivodnoj fajl }
  rewrite(OutFile);
TESTING:    CLRSCR;
  while (not EOF (InpFile)) do
  begin
   readln(InpFile, InputString);
   OutputString:=InputString;
   writeln( OutputString);
   If Pos('BEGIN',OutputString) >0 then
   begin
   OutputString:='"zdesj propuskaetsa 2 stro4ki"' + Outputstring ;
   writeln( OutputString);
   Writeln(OutFile, Outputstring);
   end;
  If Pos('begin',OutputString) >0 then
   begin
   OutputString:='"zdesj propuskaetsa 2 stro4ki"' + OutputString ;
   writeln( OutputString);
   writeln(OutFile, Outputstring);
   end;
  end;
  ENDING: close(InpFile); close(OutFile);
  end.
koral:

--- Цитата ---по неизвестной причине, все строчки, которые не имеют слов "бегин", не выводятся в выводной файл
--- Конец цитаты ---
Причина известна: компиляторов с телепатическими возможностями еще не изобрели. Вот нет в коде программы вывода этих строчек в выходной файл, они и не выводятся.


--- Цитата ---Я могу дописать текст, перед словами "бегин", но не получается пропускать строки.
--- Конец цитаты ---
Ну можно так


--- Код: ---Writeln(OutFile);
Writeln(OutFile);
Writeln(OutFile, Outputstring);
--- Конец кода ---

или


--- Код: ---Write(OutFile, #13#10#13#10);
Writeln(OutFile, Outputstring);
--- Конец кода ---

или


--- Код: ---Writeln(OutFile,#13#10#13#10, Outputstring);
--- Конец кода ---

И, кстати, зачем два раза повторять один и тот же кусок кода? Написать один if религия не позволяет?
HardWareMan:

--- Цитата: koral от 20 Февраль 2012, 00:07:25 ---И, кстати, зачем два раза повторять один и тот же кусок кода? Написать один if религия не позволяет?
--- Конец цитаты ---
А чтобы не указывать все варианты, перед этим сделать UpCase и тогда одним условием будем отлавливать гламурное BeGiN. :3
igarexa:
koral, Огромное Спасибо за помощь :) Пошаманив, провозившись, испробовав вариаций 40 кода  :blush: , наконец догнал как делать :) Конечно, были проблемы, и уже начал писать новую просьбу о помощи, но что то меня осинило))

Если делал
--- Код: ---Writeln(OutFile,#13#10#13#10, Outputstring);
--- Конец кода ---
То в выводном файле, 2 раза писались строки со словами "бегин". И делались 3 пустые строки.

Вообщем, вот часть кода с обработкой файла:

--- Код: ---  while (not EOF (InpFile)) do
  begin
   readln(InpFile, InputString);
  OutputString:=InputString;
    If Pos('BEGIN',OutputString) >0 then
   begin
   writeln(Outfile, #13#10);
   end;
   If Pos('begin',OutputString) >0 then
   begin
   writeln(Outfile, #13#10);
   end;
   writeln(Outfile,OutputString);
  end;
--- Конец кода ---


--- Цитата ---И, кстати, зачем два раза повторять один и тот же кусок кода? Написать один if религия не позволяет?
--- Конец цитаты ---

Скорее не религия, а знания не позволяют :)
Пытался сделать с If ... or ... then , но выводило ошибку, я так понял, что то вроде компилятор ожидал тип булеан, а было лонгинт.
Ну думаю не столь важно :)
CrazyMax:
igarexa, можно так (если правильно помню... давно Паскаля не видел)


--- Код: ---while (not EOF (InpFile)) do
  begin
   readln(InpFile, InputString);
  OutputString:=InputString;
    If Pos('BEGIN',UpCase(OutputString)) >0 then
   begin
   writeln(Outfile, #13#10);
   end;
   writeln(Outfile,OutputString);
  end;

--- Конец кода ---

HardWareMan тоже на это указывал.
igarexa:
Снова всем привет) И снова это я)

Я делаю програмку для обработки текста (создание файла, осмотр содержания файла и обьеденение 2х файлов (пока не дошёл)), и столкнулся с очередной проблемой. Ребят, помогите пожалуйста разобраться с ошибкой.
Вот основная программа:

--- Код: ---program lab4;
uses filework;
var Tx, filename :integer;
label CASEPOINT;
    begin
CASEPOINT:
    writeln(' menu');
    writeln('1 - sozdatj novij fajl');
    writeln('2 - osmotretj fajl');
    writeln('3 - objedenitj 2 fajlaà');
    writeln('4 - zakon4itj rabotu ');
    readln (Oper);
    case (Oper) of
  1: begin
       FCreate(Tx, filename);
     end;

  2: begin
       FRead(Tx, filename);
       end;

 { 3: begin
       FMergin
     end;   }

  4: begin
       exit;
     end;
 end;

  goto CASEPOINT;


    end.

--- Конец кода ---

И вот модуль к ней:

--- Код: ---unit filework;
interface
procedure Fcreate( var Tx: Text; FileName: String; s: String);
procedure FRead( var f :text; s:string);

implementation
uses CRT;
procedure FCreate;
Var
 Tx : Text;
 FileName : String;
 s : String;
 i,n : Integer;
Begin
 Writeln('vvedi nazvanie fajla');
 Readln (FileName);
 Assign(Tx,FileName);
 Rewrite (Tx);
 Writeln (vvedi koli4estvo strok');
 Readln(n);
 Writeln ('vvedi stroki');
 For i:=1 to n do
 Begin
  Readln (s);
  Writeln(Tx,s);
 End;
 Close(Tx);
End;

procedure Fread;
Var
   f : text;
   S : string;

begin
    clrscr;
    [b]assign(f, filename);[/b]
    reset(f);
    write(' ');
    while not Eof(f) do
        begin
           readln(f, S);
           write(S,' ');
        end;

    close(f);
    readln
end.
--- Конец кода ---

Есть подозрения, что проблем с подключением модуля, и с процедурами в нём намного больше, чем показывает компилятор..
Но вот собственно что мне не даёт покоя: Identifier not found "filename"
В коде я выделил это место. В гугле не очень много об этом написано, но вычитал примерно такое: "проблема бывает в паскале, используй делфи".
Помогите пожалуйтса с этим разобарться....

Yoti:

--- Код: ---filename :integer;
--- Конец кода ---
Я аж подавился...
 - Тебя как зовут?
 - 15



Ещё и goto/label на каждом шагу...


--- Код: ---FCreate(Tx, filename);
--- Конец кода ---

--- Код: ---procedure Fcreate( var Tx: Text; FileName: String; s: String);
--- Конец кода ---
HardWareMan:

--- Цитата: Yoti от 23 Апрель 2012, 04:14:39 ---Ещё и goto/label на каждом шагу...
--- Конец цитаты ---
Ну, допустим, не на каждом. Этот лэйбл заменяется на банальный while true do, в 4 пункте кейса обязательно вставить break (в случае использования вечного цикла) или просто halt в текущем варианте. В остальном, на ошибки указано.
Yoti:

--- Цитата: HardWareMan от 23 Апрель 2012, 14:23:51 ---В остальном, на ошибки указано.

--- Конец цитаты ---
Наверное, мне всё же стоило вот так процитировать:

--- Цитата: igarexa ---program lab4;
uses filework;
var Tx, filename :integer;
--- Конец цитаты ---

--- Цитата: igarexa ---procedure FCreate;
Var
 Tx : Text;
 FileName : String;
--- Конец цитаты ---

Подзабываю Pascal, но в Delphi бы было

--- Код: ---Tx: TextFile;
filename: String;
--- Конец кода ---
HardWareMan:

--- Цитата: Yoti от 23 Апрель 2012, 16:24:11 ---Подзабываю Pascal, но в Delphi бы было

--- Код: ---Tx: TextFile;
filename: String;
--- Конец кода ---

--- Конец цитаты ---
Так точно, часть юнита System. Но под Паскалем, тип тестового файла будет text в составе юнита dos.
Yoti:

--- Цитата: HardWareMan ---Но под Паскалем, тип тестового файла будет text в составе юнита dos.
--- Конец цитаты ---
Ясненько, спасибо. Просто не вижу смысла делать что-либо в Паскале, когда есть возможность написать cli-приложение в Дельфи.
HardWareMan:

--- Цитата: Yoti от 24 Апрель 2012, 04:57:56 ---Ясненько, спасибо. Просто не вижу смысла делать что-либо в Паскале, когда есть возможность написать cli-приложение в Дельфи.

--- Конец цитаты ---
У Дельфи в этом режиме только одно приемущество: 32битный код. В остальном, зачем стрелять из пушки по воробьям?
Yoti:

--- Цитата: HardWareMan ---В остальном, зачем стрелять из пушки по воробьям?
--- Конец цитаты ---
Зачем ставить две софтины, когда можно только одну?
HardWareMan:

--- Цитата: Yoti от 24 Апрель 2012, 19:19:47 ---Зачем ставить две софтины, когда можно только одну?
--- Конец цитаты ---
А кто сказал, что TP7/BP7 устанавливается? ;)
Yoti:

--- Цитата: HardWareMan ---А кто сказал, что TP7/BP7 устанавливается?
--- Конец цитаты ---
Принято =)

--- Цитата: Yoti ---Зачем хранить две софтины, когда можно только одну?
--- Конец цитаты ---
igarexa:
Yoti,HardWareMan, Спасибо что указали где ошибки  :) Пришлось повозиться с этой програмкой...  Правда выяснилось, что надо использовать исходник, что мне дали, он более сложный, чем моя скромная програмка... вобщем попробую сделать ))
HardWareMan:

--- Цитата: Yoti от 27 Апрель 2012, 13:45:42 ---Зачем хранить две софтины, когда можно только одну?
--- Конец цитаты ---
TP7/BP7 выгодно отличается компактным размером, не?
Yoti:
HardWareMan,
в любом случае 2 софтины весят больше одной. А копейка рубль бережёт ;)
HardWareMan:
Твоя мотивация и так понятна, к чему этот спор?
Yoti:
HardWareMan,
не позиционировал как спор =)
Навигация
Главная страница сообщений
Следующая страница
Предыдущая страница

Перейти к полной версии