Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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, "Маша", "Маша очень", []);

Флаги в зависимости от задачи


Наверх

Титульная страница Поиск, карта сайта Написать письмо