Главная страница
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-59970
ЮРИЙ_К
2003-02-26 12:55
2003.05.19
Отследить изменения на диске


1-59647
zapmax
2003-05-05 12:59
2003.05.19
Перетягивание ветвей в TTreeView


3-59599
Evg12345
2003-04-28 09:02
2003.05.19
Как ускорить Locate?


1-59719
Navi
2003-05-04 08:55
2003.05.19
Таскать картинку как в ACDSee или ScrollBox


14-59865
cult
2003-04-28 15:22
2003.05.19
где бы почитать про TAPI?