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

Вниз

Поиск и замена текста   Найти похожие ветки 

 
Zergling ©   (2003-05-06 06:29) [0]

Здраствуйте, уважаемые мастера!
Имеется к примеру строки: "Большя гора" и "БольшяГора". Слово "Большая" к примеру нужно заменить на "Малая", но при условии полном совпадении искомой строки т.е. измениться при замене только строка "Большя гора", а "БольшяГора" останется без изменения.
AnsiReplaceText, StringReplace - производит замену текста не учитывая нужное мне свойство "только слово целиком". Искал в FAQ, статьях, на королевстве дельфи, UBPFD, но чего то ни чего не нашел.
Киньте пожалуйста ссылочку на данную тему или примерчик. Буду очень благодарен.

P.S. ReplaceDialog из палитры компонентов Dialogs не предлагать, т.к. замену мне нужно осуществить програмно без использования диалогового окна.


 
MBo ©   (2003-05-06 06:31) [1]

так ты ищи "Большая " - т.е. с пробелом


 
default ©   (2003-05-06 08:56) [2]

function BMSearch(StartPos: Integer; const S, P: String): Integer;
type
TBMTable = array[0..255] of Integer;
var
Pos, lp, i: Integer;
BMT: TBMTable;
begin

for i := 0 to 255 do BMT[i] := Length(P);
for i := Length(P) downto 1 do if BMT[Byte(P[i])] = Length(P) then
BMT[Byte(P[i])] := Length(P) - i;

lp := Length(P);
Pos := StartPos + lp -1;
while Pos <= Length(S) do
if P[lp] <> S[Pos] then Pos := Pos + BMT[Byte(S[Pos])] else
if lp = 1 then begin Result := Pos; Exit; end else
for i := lp - 1 downto 1 do if P[i] <> S[Pos - lp + i] then
begin
Inc(Pos);
Break;
end else if i = 1 then
begin
Result := Pos - lp + 1;
Exit;
end;
Result := 0;

end;

procedure TForm1.BitBtn1Click(Sender: TObject);
var
InF, OutF: TextFile;
FAttr, i: Integer;
Str: String;
begin

if (Edit1.Text = "") or (Edit2.Text = "") then
Application.MessageBox("Не все данные введены!", "Ошибка!") else
if OpenDialog1.Execute then begin
AssignFile(InF, OpenDialog1.FileName);
{$I-}
FAttr := FileGetAttr(OpenDialog1.FileName);
FileSetAttr(OpenDialog1.FileName, 0);
Reset(InF);
if IOResult <> 0 then
Application.MessageBox("Файл не доступен!", "Ошибка!") else
begin
{$I+}
AssignFile(OutF, ExtractFilePath(Application.ExeName) + "ReplFile.txt");
Rewrite(OutF);
while not Eof(InF) do begin
ReadLn(InF, Str);
i := 1;
repeat
i := BMSearch(i, Str, Edit2.Text);
if i <> 0 then begin
Delete(Str, i, Length(Edit2.Text));
Insert(Edit1.Text, Str, i);
i := i + Length(Edit1.Text);
end;
until i = 0;
WriteLn(OutF, Str);
end;
FileSetAttr(OpenDialog1.FileName, FAttr);
CloseFile(OutF);
CloseFile(InF);
Edit1.Text := "";
Edit2.Text := "";
ActiveControl := Edit2;
Application.MessageBox("Операция замены завершена!", "Уведомление");
end;
end;

end;

вот кусок из проги посмотри


 
REA ©   (2003-05-06 10:13) [3]

Большая гора...



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

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

Наверх




Память: 0.47 MB
Время: 0.011 c
7-59964
Dr.Abolo
2003-03-22 17:10
2003.05.19
запрет клавиш


1-59798
TALLA_
2003-05-07 08:14
2003.05.19
Как приспособить строки из макроса Excel в Delphi, через OLE


14-59890
СлБ
2003-04-29 14:13
2003.05.19
Компонент с Rx


1-59659
Евгений
2003-05-06 23:06
2003.05.19
Как мне записать массив в файл


1-59655
mixamixa
2003-05-07 11:51
2003.05.19
Как запустить *.hlp? По нажатию Button.