Форум: "Начинающим";
Текущий архив: 2006.03.26;
Скачать: [xml.tar.bz2];
ВнизТекст Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.058 c