Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 4 352

/ вопрос открыт /

Здравствуйте, эксперты!
В программе, которую я пишу, есть две процедуры (события не кнопки), первая удаляет символы из строки, вторая удаляет и вставляет (заменят),
разница между ними только в том, что во вторую добавлена функция insert. Но вот что интересно, удаление происходит не сразу всех выбранных символов, а замена всех сразу. Подскажите, пожалуйста, в чём может быть загвоздка?

Evgenii Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Evgenii (статус: Посетитель)
Вопрос отправлен: 21 июня 2010, 14:24
Состояние вопроса: открыт, ответов: 0.


Мини-форум вопроса

Всего сообщений: 7; последнее сообщение — 23 июня 2010, 00:10; участников в обсуждении: 6.
Вадим К

Вадим К (статус: Академик), 21 июня 2010, 14:26 [#1]:

Ошибка в 17 строке.

Приводите исходники или ищите сами ошибку.
Плюс, лучше привести примеры, что подали и что получили и что хотелось получить.
Галочка "подтверждения прочтения" - вселенское зло.
min@y™

min@y™ (статус: Доктор наук), 21 июня 2010, 14:31 [#2]:

Цитата (Вадим К):

Ошибка в 17 строке.

Целиком и полностью поддерживаю, коллега! Именно в 17-й!
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Егор

Егор (статус: 10-ый класс), 21 июня 2010, 18:31 [#3]:

а точно, в 17-ой - именно в ней!
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
padonak

padonak (статус: Посетитель), 22 июня 2010, 01:41 [#4]:

нифига... там и в 32-ой необъявленная переменная используется...
Evgenii

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™

min@y™ (статус: Доктор наук), 22 июня 2010, 17:13 [#6]:

Жуть какая! Попробовал проанализировать - через 5 минут начала болеть голова. Ты-то как в этом брейнфакинге разбираешься? Тут же ноль комментариев, 100500 глобальных переменных, стандартные названия контролов и ничего не говорящие идентификаторы!

Сформулируй правильно, что должны делать функции и я попробую их тебе написать.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Maksell

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!

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:27
Выполнено за 0.03 сек.