Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.12.2009, 13:31   #1
DarkMan-4ever
 
Регистрация: 25.03.2009
Сообщений: 4
По умолчанию Поиск подстроки в MEMO(определение номера)

Сразу предупреждаю, Delphi знаю поверхностно
Задача такая:
есть 2 формы:

форма№1
edit1
memo1
button1
button2
label1

форма№2
edit1
edit2
memo1
memo2
button1
button2
====================
Работа формы №2

при загрузки формы происходит запись из внешних файлов в memo1 и memo2.

Ввожу текст в edit1 и edit2, после нажатия кнопки button1, происходит запись текста в memo1 и memo2 соответсвенно. После нажатия кнопки button2, происходит запись в 2 внешних файла текстов из memo1 и memo2.
-----------------------------------------------------------------------
код:
unit Unit2;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm2 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Button1: TButton;
Label1: TLabel;
Label2: TLabel;
Button2: TButton;
memo1: TMemo;
memo2: TMemo;
Label3: TLabel;
Label4: TLabel;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormShow(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form2: TForm2;
n1:byte;
n2:byte;


implementation

{$R *.dfm}

procedure TForm2.Button1Click(Sender: TObject);
begin
n1:=memo1.Lines.Count;
n2:=memo2.Lines.Count;
memo1.Lines.Add(edit1.text);
memo2.Lines.Add(edit2.Text);

end;

procedure TForm2.Button2Click(Sender: TObject);
begin
memo1.Lines.SaveToFile('vop.txt');
memo2.Lines.SaveToFile('otv.txt');
end;


procedure TForm2.FormShow(Sender: TObject);
begin
memo1.Lines.LoadFromFile('vop.txt') ;
memo2.Lines.LoadFromFile('otv.txt') ;
end;

end.
----------------------------------------------------------------------

работа формы №1
вводиться в edit1 текст, и при нажатие button1, происходит поиск подстроки в memo1(формы№2), и если такая строка находиться, то вычисляеться номер этой строки и береться строка из memo2(формы№2) с тем же номером. Дальше происходит запись в memo1(формы№1) текста из edit1(формы№1) и строки из memo2(формы№2.
------------------------------------------------------------------------
код:
unit lab4;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Memo1: TMemo;
Button1: TButton;
Label1: TLabel;
Edit1: TEdit;
Button2: TButton;
procedure Button2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
implementation

uses unit2;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
find:string;
i,n:byte;
begin
find:=edit1.Text;
for i:=1 to form2.memo1.Lines.Count-1 do
if Pos(find,form2.memo1.Lines.Text)<>0
then
begin
label1.Visible:=false;
form2.Memo1.SetFocus();
form2.Memo1.SelStart:=Pos(FIND,form 2.Memo1.Lines.Text)-1;
Memo1.SelLength:=Length(find);
n:=form2.Memo1.SelStart;
break;

end
else
begin
form1.Label1.Visible:=true;
end;
form1.memo1.Lines.Add('Ïîëüçîâàòåëü ñêàçàë:');
form1.memo1.Lines.Add(form1.edit1.T ext);
form1.memo1.Lines.Add('Ìàøèíà îòâåòèëà:');
form1.memo1.Lines.Add(form2.memo2.L ines[n]);
edit1.Clear;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
form2.Show;
end;
end.
--------------------------------------------------------------------------

Проблема вот в чем, не могу получить номера строк, и если получаю, то не правильно.После ввода нового текста в edit1(формы№1), цикл не хочет запускаться!!! Хелп ребята, завтра сдавать прогу!!!
DarkMan-4ever вне форума Ответить с цитированием
Старый 20.12.2009, 14:00   #2
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

Пользуйтесь тегом Code (#)

Можно оформить так:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  i: Integer; // Если строк много то Byte тут не поодйдет
begin
  for i := 0 to Form2.Memo1.Lines.Count - 1 do
    if Form2.Memo1.Lines.Strings[i] = Edit1.Text then
    begin
      Memo1.Lines.Add(Edit1.Text + ' : ' + Form2.Memo2.Lines.Strings[i];
    end;
...
end;
psycho-coder вне форума Ответить с цитированием
Старый 20.12.2009, 16:40   #3
DarkMan-4ever
 
Регистрация: 25.03.2009
Сообщений: 4
По умолчанию

Это банальное сравнение! а мне нужно поиск подстроки!!!
DarkMan-4ever вне форума Ответить с цитированием
Старый 20.12.2009, 16:44   #4
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

Если в подстроке не будет знаков переноса строки, то можно так
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  i: Integer; // Если строк много то Byte тут не поодйдет
begin
  for i := 0 to Form2.Memo1.Lines.Count - 1 do
    if Pos(Edit1.Text, Form2.Memo1.Lines.Strings[i]) > 0 then
    begin
      Memo1.Lines.Add(Edit1.Text + ' : ' + Form2.Memo2.Lines.Strings[i];
    end;
...
end;
psycho-coder вне форума Ответить с цитированием
Старый 20.12.2009, 17:10   #5
DarkMan-4ever
 
Регистрация: 25.03.2009
Сообщений: 4
По умолчанию

Ооооо спасибо огромное, заработало, а то неделю сделать не мог!!!
DarkMan-4ever вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Определение номера последней строки выделенного диапазона НеВа6464 Microsoft Office Excel 2 17.05.2009 14:36
Паскаль. Перечислимый тип. Определение порядкового номера дня високосного года. katya36 Помощь студентам 9 02.05.2009 13:56
Определение серийного номера логического устройства Raikhman Microsoft Office Excel 5 09.02.2009 17:48
Определение номера телефона xpress Общие вопросы по Java, Java SE, Kotlin 6 29.04.2008 20:02