Главная страница
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.014 c
4-59981
AnKa48
2003-03-18 22:07
2003.05.19
Параметры в LockSetForegroundWindow


1-59802
bkv
2003-05-07 10:21
2003.05.19
Мастера, обьясните что такое Visibroker и с чем его едят?


14-59905
Карлсон
2003-04-29 20:41
2003.05.19
как исправить?


4-59987
QUE
2003-03-19 16:14
2003.05.19
Вставить текст в чужое окно, только что обсуждалось, но не совсем


1-59679
bnn
2003-05-07 15:04
2003.05.19
Размер колонок в DBGrid