Другое > Hard'n'Soft
Вспоминаем Turbo Pascal и решаем задачи на нём
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,
не позиционировал как спор =)
Навигация
Перейти к полной версии