Помощь - Поиск - Пользователи - Календарь
Полная версия: Нужна помошь в решение задачи!..По теме Файлы
Форум «Всё о Паскале» > Delphi, Assembler и другие языки. > Delphi
F@RTEM
Тема:Файлы(текствовые);
ЗАДАЧА:
Дан текст, в котором есть одна открывающаяся и одна закрывающаяся скобка. Вывести на экран все символы, расположенные внутри этих скобок.

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

ЗАРАНЕЕ спасибо!!
Tan
Ну по идее можно так : читаешь строку с файла, потом пробегаешь по ней до того момента как находишь скобку (, после этого выводишь на экран всё, что после этой скобки до тех пор пока не встретишь ) скобку. Так как ты написал что в строке только одна открывающая и закрывающая скобка, то задание не требует дополнительных проверок.
Если я верно понял, то вот, что вышло, не судите строго, давно не кодил :
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

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


?
volvo
Цитата
А в тесте несколько строчек!
?
klem4
blink.gif

Ээ ну я цикл чтения из файла опустил ... Думал это и так понятно.
volvo
Ну, вот мне непонятно... Ты что, прилепить все строки одна к другой собрался? А длины 255 символов хватит? А если нет - то как ты через Pos одновременно ищешь в одной и той же строке и открывающую и закрывающую скобку?
klem4
)) Понял 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
Цитата(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
В Дельфях можно так сделать:
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
Цитата(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
Добавил комментарии
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
Цитата(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
а ты мне не мог бы скинуть ссылку где это можно прочитать???
чтоб разобраться до конца...посмотреть примерыи может что нибудь новое узнаю!

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

volvo
Ну, вот тут посмотри: http://delphibasics.ru/Try.php
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.