|
Вопрос # 4 352/ вопрос открыт / |
|
Здравствуйте, эксперты!
В программе, которую я пишу, есть две процедуры (события не кнопки), первая удаляет символы из строки, вторая удаляет и вставляет (заменят),
разница между ними только в том, что во вторую добавлена функция insert. Но вот что интересно, удаление происходит не сразу всех выбранных символов, а замена всех сразу. Подскажите, пожалуйста, в чём может быть загвоздка?
 |
Вопрос задал: Evgenii (статус: Посетитель)
Вопрос отправлен: 21 июня 2010, 14:24
Состояние вопроса: открыт, ответов: 0.
|
Мини-форум вопроса
Всего сообщений: 7; последнее сообщение — 23 июня 2010, 00:10; участников в обсуждении: 6.
|
Вадим К (статус: Академик), 21 июня 2010, 14:26 [#1]:
Ошибка в 17 строке.
Приводите исходники или ищите сами ошибку.
Плюс, лучше привести примеры, что подали и что получили и что хотелось получить.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
min@y™ (статус: Доктор наук), 21 июня 2010, 14:31 [#2]:
Цитата (Вадим К):
Ошибка в 17 строке.
Целиком и полностью поддерживаю, коллега! Именно в 17-й!
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Егор (статус: 10-ый класс), 21 июня 2010, 18:31 [#3]:
а точно, в 17-ой - именно в ней!
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
|
|
padonak (статус: Посетитель), 22 июня 2010, 01:41 [#4]:
нифига... там и в 32-ой необъявленная переменная используется...
|
|
Evgenii (статус: Посетитель), 22 июня 2010, 16:49 [#5]:
))))))))))))))................
var F: TFileStream;
FS: TStrings;
TS: TextFile;
FO: Boolean;
Fc, Fst: cardinal;
il, lse2: integer;
se2: string;
procedure TForm1.Edit1Change(Sender: TObject);
begin
GetCurrentDir;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
if OpenDialog1.Execute then
AssignFile(TS, OpenDialog1.FileName)
else exit;
Edit1.Text:= OpenDialog1.FileName;
if FileExists(Edit1.Text) then
begin
RichEdit1.Lines.LoadFromFile(Edit1.Text);
FO:= True;
FS:= TStringList.Create();
F:= TFileStream.Create(Edit1.Text, fmOpenReadWrite);
Fc:= Round((F.Seek(0, soFromEnd) -1)/1000);
Fst:= RichEdit1.Lines.Count;
F.Free;
Label4.Caption:= 'Файл найден. '+ 'Размер файла - ' + IntToStr(Fc) + 'Kb ' + 'Кол. строк - ' + IntToStr(Fst);
end
else begin
FO:= False;
Label4.Caption:= 'Файл не найден.';
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var i, ip, p, it, lt: integer;
sclb, sm, s: string;
begin
CheckListBox1.Clear;
se2:= Edit2.Text;
lse2:= Length(se2);
ip:= 0;
for i:= 0 to Fst do
begin
sm:= RichEdit1.Lines.Strings[i];
il:= Pos(se2,sm);
if il > 0 then
begin
sclb:= IntToStr(i + 1);
with RichEdit1 do
begin
p:= SelStart;
lt:= length(sm);
for it:= 1 to (lt - lse2 +1) do
begin
s:= copy(sm, it, lse2);
if s = se2 then
begin
ip:=ip + 1;
CheckListBox1.Items.Add(IntToStr(i + 1));
FS.Add(IntToStr(it));
end;
end;
SelStart:= p;
end;
end;
end;
for i:= 0 to CheckListBox1.Items.Count - 1 do
begin
CheckListBox1.Checked[i]:= true;
end;
if ip > 0 then
begin
Label5.Caption:= 'Найдено ' + IntToStr(ip) + ' совпадений.' + #13 + 'В строках:';
end else
Label5.Caption:= 'Выражение не найдено.';
end;
procedure TForm1.Button5Click(Sender: TObject);
var i: integer;
clbi, stm: string;
begin
for i:= 0 to CheckListBox1.Items.Count - 1 do
begin
if CheckListBox1.Checked[i] = true then
begin
clbi:= CheckListBox1.Items[i];
stm:= RichEdit1.Lines.Strings[StrToInt(clbi) -1];
Delete(stm, StrToInt(FS.Strings[i]), lse2);
RichEdit1.Lines.Strings[StrToInt(clbi) -1]:= stm;
end;
end;
FS.Clear;
Form1.Button1.Click;
end;
procedure TForm1.Button6Click(Sender: TObject);
var i: integer;
clbi, stm: string;
begin
for i:= 0 to CheckListBox1.Items.Count - 1 do
begin
if CheckListBox1.Checked[i] = true then
begin
clbi:= CheckListBox1.Items[i];
stm:= RichEdit1.Lines.Strings[StrToInt(clbi) -1];
Delete(stm, StrToInt(FS.Strings[i]), lse2);
Insert(Edit3.Text, stm, StrToInt(FS.Strings[i]));
RichEdit1.Lines.Strings[StrToInt(clbi) -1]:= stm;
end;
end;
FS.Clear;
Form1.Button1.Click;
end;
end.
|
|
min@y™ (статус: Доктор наук), 22 июня 2010, 17:13 [#6]:
Жуть какая! Попробовал проанализировать - через 5 минут начала болеть голова. Ты-то как в этом брейнфакинге разбираешься? Тут же ноль комментариев, 100500 глобальных переменных, стандартные названия контролов и ничего не говорящие идентификаторы!
Сформулируй правильно, что должны делать функции и я попробую их тебе написать.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Maksell (статус: Посетитель), 23 июня 2010, 00:10 [#7]:
отличие юзера от программиста - юзер думает,что в одном килобайте - 1000 байт, а программист точно уверен, что в одном километре - 1024 метра...
к чему бы это я?! а х да!!! - ты когда Кб считаешь - размер получаешь больше, чем он на самом деле...
====> Fc:= Round((F.Seek(0, soFromEnd) -1)/ => 1000 <= );
ты хотябы комменты пиши, себе работу упростишь в последствии, и для анализа проще и потом - у TRichEdit eсть замещятельный вешча - .Lines.Text, которая позволяет обратиться ко всему тексту одновременно, а не только к конкретной строке (но это так - мелочи)
... не хрень якая-то...
ты лучше задание напиши правильно, а там можно будет подсказать, як что нужно делать...
Si numqum quaeris, raro magister eris!
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|