| Другое > 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, не позиционировал как спор =) |
| Навигация |
| Главная страница сообщений |
| Следующая страница |
| Предыдущая страница |