Главная страница
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
8-59815
Demetrius
2003-02-04 19:28
2003.05.19
G32


1-59749
Ghost_
2003-05-06 10:21
2003.05.19
ShellListView


14-59882
MalkoLinge
2003-04-29 11:49
2003.05.19
Львов и конкурс ?


9-59525
Crazy Max
2002-12-14 15:17
2003.05.19
2-х оконное приложение на OpenGl


1-59747
Max1111
2003-05-06 10:58
2003.05.19
Вопрос по конструированию