Главная страница
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.017 c
14-59893
Style
2003-04-25 08:46
2003.05.19
У кого нить есть пример алгоритма сортировки слиянием MergeSort!


1-59786
RIMMER
2003-05-07 01:11
2003.05.19
Автозаполнение


14-59923
stas_a
2003-04-30 09:50
2003.05.19
Функции чужой Dll


14-59944
Top Gun
2003-04-30 16:26
2003.05.19
Книга Рихтера, четвертое издание - урезанное ?


3-59570
_angelll
2003-04-27 16:45
2003.05.19
Подключение к базе ACCESS через ADO не удаляется запись