![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
TStringList [D5, WinXP]
DeMoN-777 © (2002-10-07 18:06:00)Как в TStringList найти определённый текст(слово) и вставить после него свой текст(слово), а далше чтоб всё шло как и было. ?
Например есть текст "Маша сильно болеет туберкулёзом".
Мне надо после слова "Маша" вставить слово "очень", чтобы получилось "Маша очен сильно болеет туберкулёзом"
Romkin (2002-10-08 13:41:00) [1]блин, вместо s[0] надо s[1], совсем уже...
Romkin (2002-10-08 13:39:00) [2]Мда... Прибил бы за free не в finally, сразу
Зачем тебе TStringList? насколько понимаю, читаешь файл, заменяешь кусок строки, потом записываешь обратно... Так и надо делать:
var
F1: File of byte;
s: string;
Len: integer;
begin
assignFile(f1,LbDir.Items[LbDir.ItemIndex]);
reset(f1);
Len := FileSize(f);
SetLength(s, len);
BlockRead(f1,s[0],len);
CloseFile(f1);
s:= StringReplace(s, MmFind.Lines.text,MmFind.Lines.text+MmPaste.lines.text,[rfReplaceAll]);
rewrite(f1);
Blockwrite(f1,s[0],length(s));
closefile(f1);
end;
Вроде должно прокатить
DeMoN-777 (2002-10-08 13:22:00) [3]>McSimm © (08.10.02 11:34)
Сасибо, разобрался, но я выбрал такой варинт, так как он кажется мне предпочтительней.
procedure TForm1.BbStartClick(Sender: TObject);
var pos,i: integer;
S :String;
begin
BbStart.Enabled:=False;//Делаем недоступной кнопку start
Progress.Progress:=0; //Онулируем прогрессбар
Progress.ForeColor:=ClBlack;//Делаем чёрным прогрессбар
if LbDir.Items.Count >=0 then
begin
Progress.MaxValue:=LbDir.Items.Count;//Махимальное значение прогрессбара
With TStringList.Create Do
begin
for i:=0 to LbDir.items.count-1 do
begin
LbDir.ItemIndex:=i;
LoadfromFile(LbDir.Items[LbDir.ItemIndex]);
s:=Text;
s:= StringReplace(s, MmFind.Lines.text,MmFind.Lines.text+MmPaste.lines.text,[rfReplaceAll]);
Text:=s;
Application.ProcessMessages;
Progress.Progress:=i+1;//Прибавляем процент к прогрессбару
SaveToFile(LbDir.Items[LbDir.ItemIndex]);
end;
Free;
end;
end;
Progress.ForeColor:=ClRed;
BbStart.Enabled:=True;
end;
McSimm (2002-10-08 11:34:00) [4]Попробуем помочь (хотя это и сложно в данном случае, приходится угадывать)
--
if LbDir.Items.Count >= 0 then
Это что? Вероятнее всего это условие всегда истинно.
--
Структура лучше такая:
SL := TStringList.Create;
try
// все действия
finally
SL.Free
end;
--
Pos := ansipos(MmFind.Lines.Text, s);
А что мы ищем?
Попробуй так: ansipos(MmFind.Lines[0], s);
Набережных С. (2002-10-07 20:58:00) [5]А что тебе компилятор говорит?
DeMoN-777 (2002-10-07 20:45:00) [6]>TTCustomDelphiMaster © (07.10.02 19:31)
Я же говорюто щас некогда.
TTCustomDelphiMaster (2002-10-07 19:31:00) [7]
> а времени нет
Тогда скорее за книжку...
DeMoN-777 (2002-10-07 19:23:00) [8]>TTCustomDelphiMaster © (07.10.02 19:14)
Естестенно.
Так-то я обычно сам со всем разбираюсь сам, только мне это срочно надо, а времени нет. Вот и прошу помощи мастеров.
TTCustomDelphiMaster (2002-10-07 19:14:00) [9]Тогда дочитайте, а потом продолжите. Кучу времени съэкономит.
DeMoN-777 (2002-10-07 19:10:00) [10]Не добовляет =(
DeMoN-777 (2002-10-07 19:05:00) [11]>TTCustomDelphiMaster © (07.10.02 19:03)
>Вы умеете пользоваться средствами отладки Delphi?
Нет, пока не дочитал.
TTCustomDelphiMaster (2002-10-07 19:03:00) [12]Что не работает?
А где TStringList.Free?
Вы умеете пользоваться средствами отладки Delphi?
McSimm (2002-10-07 18:58:00) [13]Что именно не работает?
MmFind.Lines.Text может содержать #13#10
(кстати, где TStringList.Free ?)
DeMoN-777 (2002-10-07 18:49:00) [14]Не работает =(
procedure TForm1.BbStartClick(Sender: TObject);
var pos,i: integer;
S :String;
begin
BbStart.Enabled:=False;//
Romkin (2002-10-07 18:16:00) [15]s := StringList1.Text;
mashaPos := ansipos("Маша", s);
if MashaPos > 0 then Insert(" очен",s,MashaPos);
StringList1.Text := s;
Так проще всего, имхо
McSimm (2002-10-07 18:14:00) [16]Например так:
SL.Text := StringReplace(SL.Text, "Маша", "Маша очень", []);
Флаги в зависимости от задачи