Обработка символьных данных

Тема в разделе "Delphi - FAQ", создана пользователем Kavlar, 7 дек 2007.

Статус темы:
Закрыта.
  1. Kavlar

    Kavlar Гость

    Всем привет)
    Парни, очень нужен ваш совет.
    Пишу программку - загрузить ОпенДалогом в РичЕдит (РидОнли = тру) текст, далее нужно найти в тексте файла фразу или слово ограниченное скобками
    (слово или фраза),
    удалить ее вместе со скобками и СэйвДиалогом сохранить новый файл. Раньше никогда не сталкивался с поиском символов в строках.

    Загрузку/сохранение файла реализовал. Дальше небольшая проблемка с этими скобками и словом/фразой.
    Значит, какие у меня мысли:

    объявить переменные:
    pozicia:=0; //сколько букв всего
    poziciask:=0; //с какой позиции скобка открывается (
    poziciask2:=0; //на какой позиции скобка закрывается )

    проанализировать текст, потом вычесть из poziciask2 переменную poziciask и удалить полученное количество символов начиная с того момента, когда скобка открывается.
    Никак не могу реализовать условие(( Плюс подскажите, какой функцией можно реализовать удаление символов.

    Вот что я вымучал


    Код (Text):
    procedure TForm1.Button1Click(Sender: TObject);
    begin

    pozicia:=0;
    poziciask:=0;
    poziciask2:=0;

    //проверяем строки
    for i:=0 to richedit1.lines.count-1 do
    begin
    //вложенным циклом проверяем символы в строках
    for j:=0 to length(richedit1.lines.strings[i])-1 do
    begin

    // если скобка открывается, то poziciask + 1;
    if richedit1.lines.strings[i] = '(' then
    begin
    poziciask:= poziciask+1;
    end

    // если есть скобка не открывается, то pozicia + 1;
    else
    begin
    pozicia:= pozicia+1;
    end;
    end;
    end;
    end;
    Label1.Caption:= 'скобка начинается с позиции ' + FloatToStr(poziciask);
    Label2.Caption:= 'всего букв ' + FloatToStr(pozicia);
    end.

    если лень код писать, хотя бы словами подскажите алгоритм. Под вечер уже башка не варит совсем((
     
  2. root

    root Гость

    Для: Kavlar
    Код (Text):
    RichEdit1.FindText()
    что то на подобе
    var
    Pos1,Pos2: integer;
    begin
    Pos1:=RichEdit1.FindText('(',0,length(RichEdit1.text ),[stMatchCase]);
    Pos2:=RichEdit1.FindText(')',0,length(RichEdit1.text ),[stMatchCase]);
    RichEdit1.SetFocus;
    RichEdit1.SelStart := Pos1;
    RichEdit1.SelLength := (pos2-pos1)+1;
    +F1
     
  3. Kavlar

    Kavlar Гость

    спасибо, буду пробовать
     
  4. root

    root Гость

    Для: Kavlar
    + в репутацию вместо флуда :blink:
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей