Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.03.26;
Скачать: CL | DM;

Вниз

Текст   Найти похожие ветки 

 
mrAndersen ©   (2006-03-06 22:19) [0]

Буду краток. Есть текстовый файл, в котором есть текст. Нужно удалить
символ который стоит после символа 5 но при этом, эти действия нужно производить только с текстом в скобках.

Пример программы(программа рабочая):
procedure TForm1.Button1Click(Sender: TObject);
var
 F1,F2: TextFile;
 a: String;
 k,i,j1,j2:integer;
begin
  AssignFile(F1,"D:\old\Delphi5_s\ses1.txt");
  AssignFile(F2,"D:\old\Delphi5_s\ses2.txt");
  reset(F1);
  rewrite(F2);
begin
 While Not EOF(F1) do begin
 If Not EOLN(F1) then begin
     Readln(F1,a);
     k:=length(a);

     j1:=pos( "(" ,a);  
      j2:=pos( ")" ,a);

     for i:=j1 to j2 do

   if a[i]="5" then  Delete(a,i+1,1);
   Write(F2,a);

end;
end;
end;
CloseFile(F1);
CloseFile(F2);
end.

Есть текстовый файл - ses1.txt, в котором есть такой текст:
кактус11(156111)1561бус1(1561осень11)15611...

при компиляции выходит:
ses2.txt - текстовый файл с таким текстом:
кактус11(15111)1561бус1(1561осень11)15611...

как Вы уже заметили, есть разница, но главный вопрос состоит в том, ЧТОБЫ ТЕКСТ ИЗМЕНЯЛСЯ У ВСЕХ СКОБКАХ, А НЕ ТОЛЬКО В ПЕРВОЙ.

Буду очень признателен за любые варианты решения этой задачи.


 
Zeqfreed ©   (2006-03-06 23:37) [1]

function SkipCharsAfterFives(const Src : String) : String;
var
 i : Integer;
 bracket : boolean;
begin
 Result := "";
 i := 1;
 bracket := false;

 repeat
  Result := Result + Src[i];
  if (Src[i] = "(") then bracket := true;
  if (Src[i] = ")") then bracket := false;
  if (bracket) and (Src[i] = "5") and (Src[i] <> ")") then Inc(i);

  Inc(i);
 until (i > length(Src));
end;

Простейший вариант. :)


 
Плохиш ©   (2006-03-07 01:41) [2]


> Zeqfreed ©   (06.03.06 23:37) [1]

Мне вот это понравилось (Src[i] = "5") and (Src[i] <> ")") ;-)
В каком-то месте надо или i+1 или i-1 писать, ну и границы проверять.

PS. Может скопируешь ему свой код в весь десяток спамовых веток?


 
mrAndersen ©   (2006-03-07 01:59) [3]

Спасибо тебе Zeqfreed, я очень благодарен тебе за этот программный код


 
evvcom ©   (2006-03-07 08:57) [4]


> при компиляции выходит:
> ses2.txt

Что? Сразу при компиляции уже выходит? :)


 
Leonid Troyanovsky ©   (2006-03-07 09:30) [5]



> Zeqfreed ©   (06.03.06 23:37) [1]

>  bracket : boolean;


Для того, чтобы знать находится ли текущий токен внутри скобок нужно
при появлении ( увеличивать счетчик, а при ) - декрементировать.
Т.е., если счетчик нулевой - токен вне скобок.

--
Regards, LVT.


 
Zeqfreed ©   (2006-03-07 12:53) [6]

[5] Leonid Troyanovsky ©   (07.03.06 09:30)
Да, разумеется, полностью согласен :)
Написал специально «простейший вариант», там даже закрывающей скобки не надо, т.е. не совсем корректно. Что-то уж мне вчера сильно спать хотелось :)



Страницы: 1 вся ветка

Текущий архив: 2006.03.26;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.041 c
11-1123058007
Ajax
2005-08-03 12:33
2006.03.26
Form.CanResize:=False и програмное изменение размеров


15-1141502713
DesWind
2006-03-04 23:05
2006.03.26
"День сурка"


2-1142049830
mfender
2006-03-11 07:03
2006.03.26
Редактор TStrings в Design-Time


3-1138863564
DelphiN!
2006-02-02 09:59
2006.03.26
Выбор всех значений, которые принадлежат интервалу времени


4-1136581044
Rommel
2006-01-06 23:57
2006.03.26
Control на рабочем столе