Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Делфи _ Нужна помошь в решение задачи!..По теме Файлы

Автор: F@RTEM 16.06.2007 17:44

Тема:Файлы(текствовые);
ЗАДАЧА:
Дан текст, в котором есть одна открывающаяся и одна закрывающаяся скобка. Вывести на экран все символы, расположенные внутри этих скобок.

Причём нужна брать текст из файла вывести на экран...
А в тесте несколько строчек!
Нужен Текст задачи!!
P.S.
Лучше решить задачу в делфи...
Но можно и в паскале...сам потом передалаю

ЗАРАНЕЕ спасибо!!

Автор: Tan 16.06.2007 18:24

Ну по идее можно так : читаешь строку с файла, потом пробегаешь по ней до того момента как находишь скобку (, после этого выводишь на экран всё, что после этой скобки до тех пор пока не встретишь ) скобку. Так как ты написал что в строке только одна открывающая и закрывающая скобка, то задание не требует дополнительных проверок.
Если я верно понял, то вот, что вышло, не судите строго, давно не кодил :

Uses crt;
Const filename = 'Data.txt';
Var f : Text;
s : string;
i : integer;
openn,closee : boolean;
begin
Clrscr;
assign (f,filename);
Reset (f);
while not eof(f) do
begin
readln (f,s);
openn := False;
Closee := False;
writeln;
for i := 1 to Length(S) do
begin
if s[i] = '(' then openn := True else if s[i] = ')' then Closee := True;
if (Openn and Not(Closee)) and (s[i] <> '(') then write (s[i] : 2);
end;
end;
Close (f);
readkey;
end.

Автор: klem4 16.06.2007 22:22


// ...
readln(f, s);
writeln(Copy(s, Pos('(', s) + 1, Pos(')', s) - Pos('(', s) - 1));


?

Автор: volvo 16.06.2007 22:26

Цитата
А в тесте несколько строчек!
?

Автор: klem4 16.06.2007 22:27

blink.gif

Ээ ну я цикл чтения из файла опустил ... Думал это и так понятно.

Автор: volvo 16.06.2007 22:34

Ну, вот мне непонятно... Ты что, прилепить все строки одна к другой собрался? А длины 255 символов хватит? А если нет - то как ты через Pos одновременно ищешь в одной и той же строке и открывающую и закрывающую скобку?

Автор: klem4 16.06.2007 22:47

)) Понял smile.gif

Сглючило на то что в файле в каждой строке есть по 2 скобки ...

Ну тогда вот так:

uses crt;

var
f: Text;
s: Char;

begin
assign(f, 'text.txt');
reset(f);
while not(eof(f)) do begin
read(f, s);
while not(eof(f)) and (s <> '(') do read(f, s);
if not(eof(f)) then read(f, s);
while not(eof(f)) and (s <> ')') do begin
write(s);
read(f, s);
end;
end;
close(f);
end.

Автор: F@RTEM 17.06.2007 1:48

Цитата(klem4 @ 16.06.2007 19:47) *

)) Понял smile.gif

Сглючило на то что в файле в каждой строке есть по 2 скобки ...

Ну тогда вот так:

uses crt;

var
f: Text;
s: Char;

begin
assign(f, 'text.txt');
reset(f);
while not(eof(f)) do begin
read(f, s);
while not(eof(f)) and (s <> '(') do read(f, s);
if not(eof(f)) then read(f, s);
while not(eof(f)) and (s <> ')') do begin
write(s);
read(f, s);
end;
end;
close(f);
end.



ага...пасибочки...
я её переделал в делфи...
она работает...но у меня получается что он выводит по одной букве(т.е по одному символу в строчку)

var
s:string;{Если я меняю на string то задача виснит}
begin
assignfile(g,'myfile.txt');
Reset(g);
while not eof(g) do begin
read(g,s);
while not(eof(g)) and (s <> '(') do read(g,s);
if not(eof(g)) then read(g,s);
while not(eof(g)) and (s <> ')') do begin
Memo2.Lines.Add(s);
read(g,s);
end;
end;
closefile(g);
end;
end.


не подскажите как это сделать???

Автор: volvo 17.06.2007 2:57

В Дельфях можно так сделать:

procedure TForm1.Button1Click(Sender: TObject);
var sl: tstringlist;
begin
sl := tstringlist.Create;
try
sl.LoadFromFile('txt.txt');
memo1.Text :=
Copy(sl.Text, Pos('(', sl.Text) + 1, Pos(')', sl.Text) - Pos('(', sl.Text) - 1);
finally
sl.Free;
end;
end;


Автор: F@RTEM 18.06.2007 20:55

Цитата(volvo @ 16.06.2007 23:57) *

В Дельфях можно так сделать:
procedure TForm1.Button1Click(Sender: TObject);
var sl: tstringlist;
begin
sl := tstringlist.Create;
try
sl.LoadFromFile('txt.txt');
memo1.Text :=
Copy(sl.Text, Pos('(', sl.Text) + 1, Pos(')', sl.Text) - Pos('(', sl.Text) - 1);
finally
sl.Free;
end;
end;



Пасибо Работает...
а объясни мне пожалуйста(а то я не знаю) что это означает

procedure TForm1.Button1Click(Sender: TObject);
var sl: tstringlist;{ЭТО КАК Я ПОНИМАЮ ТОЖЕ САМОЕ ЧТО STRING НО ТОКА В НЕСКОЛЬКО СТРОЧКАХ...ТАК Я ПОНИМАЮ???}
begin
sl := tstringlist.Create;
try{А ВОТ ЧТО ЭТО ОЗНАЧАЕТ Я НЕЗНАЮ???НЕПОДСКАЖИТЕ???}
sl.LoadFromFile('txt.txt');
memo1.Text :=
Copy(sl.Text, Pos('(', sl.Text) + 1, Pos(')', sl.Text) - Pos('(', sl.Text) - 1);
finally {А ВОТ ЧТО ЭТО ОЗНАЧАЕТ Я НЕЗНАЮ???НЕПОДСКАЖИТЕ???}
sl.Free;{А ВОТ ЧТО ЭТО ОЗНАЧАЕТ Я НЕЗНАЮ???НЕПОДСКАЖИТЕ???}
end;
end;


Автор: volvo 19.06.2007 2:24

Добавил комментарии

procedure TForm1.Button1Click(Sender: TObject);
var sl: tstringlist; // это класс Дельфи, предназначенный для хранения _списка_ строк...
begin
sl := tstringlist.Create; // Создаем список строк

// в принципе можно обойтись и без try/finally, но я предпочитаю быть уверенным, что
// объект будет удален независимо от успешности его обработки
try

sl.LoadFromFile('txt.txt');
memo1.Text :=
Copy(sl.Text, Pos('(', sl.Text) + 1, Pos(')', sl.Text) - Pos('(', sl.Text) - 1);
finally
// поскольку это находится в Finally, то независимо от результата действий в секции Try
// строка Free выполнится всегда ...
sl.Free; // а это, собственно, означает освобождение списка строк. Фактически - удаление его

end;
end;



P.S. Тему надо бы двинуть в Delphi ...

Автор: F@RTEM 19.06.2007 2:42

Цитата(volvo @ 18.06.2007 23:24) *

Добавил комментарии
procedure TForm1.Button1Click(Sender: TObject);
var sl: tstringlist; // это класс Дельфи, предназначенный для хранения _списка_ строк...
begin
sl := tstringlist.Create; // Создаем список строк

// в принципе можно обойтись и без try/finally, но я предпочитаю быть уверенным, что
// объект будет удален независимо от успешности его обработки
try

sl.LoadFromFile('txt.txt');
memo1.Text :=
Copy(sl.Text, Pos('(', sl.Text) + 1, Pos(')', sl.Text) - Pos('(', sl.Text) - 1);
finally
// поскольку это находится в Finally, то независимо от результата действий в секции Try
// строка Free выполнится всегда ...
sl.Free; // а это, собственно, означает освобождение списка строк. Фактически - удаление его

end;
end;



P.S. Тему надо бы двинуть в Delphi ...

ПАСИБО БОЛЬШОЕ!!!!!!


Автор: F@RTEM 19.06.2007 17:43

а ты мне не мог бы скинуть ссылку где это можно прочитать???
чтоб разобраться до конца...посмотреть примерыи может что нибудь новое узнаю!

try
-//-//-//-//-//-//
finally


Автор: volvo 19.06.2007 18:01

Ну, вот тут посмотри: http://delphibasics.ru/Try.php