Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Memo поле


Автор: TaNK 14.11.2006, 20:26
например в мемо введено 10 значений через Memo->Lines->Add, как мне считать все данные от начало до конца, а потом их запихнуть в массив типа int, голова уже что то не варит! подскажите

Автор: Rodman 14.11.2006, 20:42
Memo->Lines->TExt;//весь текст

Memo->Lines->Strings[i];//построчно

Автор: TaNK 14.11.2006, 20:44
Цитата(Rodman @ 14.11.2006,  20:42)
Memo->Lines->TExt;//весь текст

Memo->Lines->Strings[i];//построчно

а цикл организовать через for или как?

Автор: nur87 14.11.2006, 20:58
Цитата(TaNK @  14.11.2006,  20:44 Найти цитируемый пост)
а цикл организовать через for или как?

можешь через цикл
Код

for (int i=0;i<11;i++)
 {
  Memo->Lines->Strings[i];
 }

а как записать в буфер пока не выяснил

Автор: Rodman 14.11.2006, 20:59
Код

Showmessage(Memo->Lines->TExt);//весь текст
for (int i=0;i<Memo->Lines->Count-1;i++)//не уверен возмодно  цыкл for (int i=1;i<Memo->Lines->Count;i++)
   Showmessage(Memo->Lines->Strings[i]);//построчно

Автор: TaNK 14.11.2006, 21:10
Цитата(Rodman @ 14.11.2006,  20:59)
Код

Showmessage(Memo->Lines->TExt);//весь текст
for (int i=0;i<Memo->Lines->Count-1;i++)//не уверен возмодно  цыкл for (int i=1;i<Memo->Lines->Count;i++)
   Showmessage(Memo->Lines->Strings[i]);//построчно

Код

for (int i=1;i<Memo->Lines->Count;i++) // так правильнее

а потом как загнать в массив int который 
может 
Код

int mas[10];
for (int i=1;i<Memo->Lines->Count;i++) 
mas[i]=i;

так или я ошибаюсь?

Автор: Rodman 14.11.2006, 21:39
Код

int mas[10];
for (int i=1;i<Memo->Lines->Count;i++) 
     mas[i]=StrToInt(Memo->Lines->Strings[i]);

Автор: TaNK 14.11.2006, 21:52
Цитата(Rodman @ 14.11.2006,  21:39)
Код

int mas[10];
for (int i=1;i<Memo->Lines->Count;i++) 
     mas[i]=StrToInt(Memo->Lines->Strings[i]);

Rodman - огромное спасибо, ты просто супер человек..спасибо еще раз за помощь! smile 

Автор: TaNK 14.11.2006, 23:23
Цитата(Rodman @ 14.11.2006,  20:59)
Код

Showmessage(Memo->Lines->TExt);//весь текст
for (int i=0;i<Memo->Lines->Count-1;i++)//не уверен возмодно  цыкл for (int i=1;i<Memo->Lines->Count;i++)
   Showmessage(Memo->Lines->Strings[i]);//построчно

Rodman fа от я хочу удалять элементы из мемо с последнего элемента в мемо, но почему то он удаляет не правильно вот код - где тут ошибка
Код

for (int i=1;Memo1->Lines->Strings[i],i++)
Memo1->Lines->Delete(Memo1->Lines->Cout-1);

но удаляется как по частям  а не поодному элементу, блин вроде простая задача, а я как лопух, подскажи плиз!

Автор: a_n_d_y 15.11.2006, 00:04
А не проще ли сделать так:
 
Код

for (int i = Memo1->Lines->Count - 1; i != 0; i--)
    Memo1->Lines->Delete(i);

 smile 

Автор: Romikgy 15.11.2006, 10:55
Код

for (int i = Memo1->Lines->Count - 1; i >= 0; i--)
    Memo1->Lines->Delete(i);

иначе 0 элемент не удалится
и зачем удалять по элементно ?
вроде есть Memo1->Clear();

Автор: TaNK 15.11.2006, 11:02
Цитата(a_n_d_y @ 15.11.2006,  00:04)
А не проще ли сделать так:
 
Код

for (int i = Memo1->Lines->Count - 1; i != 0; i--)
    Memo1->Lines->Delete(i);

 smile

hgb nтакм коде удаляется весь список мемо...беда

Автор: Rodman 15.11.2006, 11:11
for (int i=Memo1->Lines->Count;i>0;i--)
   Memo1->Lines->Delete(i);

Добавлено @ 11:18 
Цитата(TaNK @  15.11.2006,  11:02 Найти цитируемый пост)
такм коде удаляется весь список мемо...беда

если хочешь удалять за один клик по кнопке по стоке, то в процедуре нажатия на кнопку напиши
Код

 if (Memo1->Lines->Count>0)
    Memo1->Lines->Delete(i);


таким образом пи каждом нажатии на клавишу будут удаляться элементы, до тех пор пока они есть...

Автор: Romikgy 15.11.2006, 11:18
TaNK, что ты хочешь сделать , я чет не пойму?

Автор: Vyacheslav 15.11.2006, 11:30
Насчет подобного когда
Код

 for (int i = Memo1->Lines->Count - 1; i >= 0; i--)
    Memo1->Lines->Delete(i);

Обычно такие вещи( перебор с конца в  начало )  делается вот так
Код

for (int i = Memo1->Lines->Count ; i--; )
{
  Memo1->Lines->Delete(i);
}

Автор: Romikgy 15.11.2006, 11:49
Vyacheslav, 

Код

i = Memo1->Lines->Count;
Memo1->Lines->Delete(i);

такого элемента нет и вывалится ошибка!
и , имхо, ваш пример теряет наглядность кода, особено если чел не силен в С/С++

Автор: TaNK 15.11.2006, 12:52
Цитата(Romikgy @ 15.11.2006,  11:18)
TaNK, что ты хочешь сделать , я чет не пойму?

я хочу удалять элементы начиная с конца, по одному, а предложенные тут варианты удалют все элемент сразу!

Добавлено @ 12:56 
Цитата(Vyacheslav @ 15.11.2006,  11:30)
Насчет подобного когда
Код

 for (int i = Memo1->Lines->Count - 1; i >= 0; i--)
    Memo1->Lines->Delete(i);

Обычно такие вещи( перебор с конца в  начало )  делается вот так
Код

for (int i = Memo1->Lines->Count ; i--; )
{
  Memo1->Lines->Delete(i);
}

спасибо Vyacheslav'y и всем кто отвечал, проблема решена!вот как,
Код

//легко и просто оказывается!
 int  i = Memo1->Lines->Count;
  Memo1->Lines->Delete(i-1);

тема закрыта!

Автор: Romikgy 15.11.2006, 12:57
Цитата(TaNK @  15.11.2006,  11:52 Найти цитируемый пост)
я хочу удалять элементы начиная с конца, по одному

? когда , во время нажатия на кнопку?
тогда это в обработчик кнопки
Код

if (Memo1->Lines->Count)
Memo1->Lines->Delete(Memo1->Lines->Count-1);

Автор: TaNK 15.11.2006, 13:00
Цитата(Romikgy @ 15.11.2006,  12:57)
Цитата(TaNK @  15.11.2006,  11:52 Найти цитируемый пост)
я хочу удалять элементы начиная с конца, по одному

? когда , во время нажатия на кнопку?
тогда это в обработчик кнопки
Код

if (Memo1->Lines->Count)
Memo1->Lines->Delete(Memo1->Lines->Count-1);

Код

void __fastcall TFMain::BtnDelClick(TObject *Sender)
{
  int  i = Memo1->Lines->Count;
  Memo1->Lines->Delete(i-1);
}

да в обработчики собития кнопки

Автор: Romikgy 15.11.2006, 13:13
TaNK, воспользуйся моим кодом , ибо когда не будет в мемо записей могЁт быть ошибка при нажатии на кнопку   smile 

Автор: Vyacheslav 15.11.2006, 13:25
Цитата(Romikgy @ 15.11.2006,  11:49)
Vyacheslav, 

Код

i = Memo1->Lines->Count;
Memo1->Lines->Delete(i);

такого элемента нет и вывалится ошибка!
и , имхо, ваш пример теряет наглядность кода, особено если чел не силен в С/С++

Поспорим, что ошибки не будет smile
итак
Код

for (int i = Memo1->Lines->Count ; i--; )
{
  Memo1->Lines->Delete(i);
}

Этот код будет эквивалентен нижеслежующему

Код

//инициализируем начальным значением
int int i = Memo1->Lines->Count;
//далее выполняем цикл
while(i--)
{
   Memo1->Lines->Delete(i);

}  

Первый цикл
Здесь интересен первый и последний цикл
Присвоили значение равное i = Memo1->Lines->Count;
Проверяем на 0
Уменьшаем на 1  не забыли : i--;
Имеем i равное Memo1->Lines->Count - 1
Выпоняем действие
Memo1->Lines->Delete(Memo1->Lines->Count - 1);

Как видидим, такое
Код

i = Memo1->Lines->Count;
Memo1->Lines->Delete(i);

никогда не выполнится

Насчет наглядности. Наглядность С++ - это прежде всего лаконичность и цикл в подобной интерпритации используется весьма часто в проф. разработке 




Автор: TaNK 15.11.2006, 13:40
Модератор:  skipped
Цитата(Vyacheslav @ 15.11.2006,  13:25)
 
...

Vyacheslav - я использовал твой код
Код

void __fastcall TFMain::BtnDelClick(TObject *Sender)
{
  int  i = Memo1->Lines->Count;
  Memo1->Lines->Delete(i-1); // только чуток изменил и все работает!
}


M
Vyacheslav
Overquoting:Правила форума: http://forum.vingrad.ru/index.phps=&act=SR&f=27
Пункт 13

Автор: Данкинг 4.2.2007, 23:37
А в чём вот тут у меня ошибка? Я хочу строки из мемо1 перенести в мемо2: 

Код

String sss;
int i;
TForm1 *Form1;

int rev()
{
if (Form1->Memo1->Lines->Count==0)
 {
  Application->MessageBoxA("Нет текста для обработки!","Ошибка!!!",MB_OK);
 }
else {
    for(i = 0; i < Form1->Memo1->Lines->Count-1; i++);
    {sss=Form1->Memo1->Lines->Strings [i];
    Form1->Memo2->Lines->Add(sss);
    }
    }
}

Автор: Romikgy 4.2.2007, 23:51
Цитата(Данкинг @  4.2.2007,  22:37 Найти цитируемый пост)
for(i = 0; i < Form1->Memo1->Lines->Count-1; i++);
    {sss=Form1->Memo1->Lines->Strings [i];
    Form1->Memo2->Lines->Add(sss);
    }

не проще ли так?
Код

Form1->Memo2->Lines->Text=Form1->Memo1->Lines->Text;

Автор: nworm 4.2.2007, 23:51
Код

for(i = 0; i < Form1->Memo1->Lines->Count-1; i++);

надо убрать ;  в конце этой строки

Автор: Данкинг 5.2.2007, 00:07
Цитата(Romikgy @  4.2.2007,  23:51 Найти цитируемый пост)
не проще ли так?

Нет, мне же строки обрабатывать потом нужно будет, я пока разбираюсь с проходом по memo.  smile 

Цитата(nworm @  4.2.2007,  23:51 Найти цитируемый пост)
надо убрать ;  в конце этой строки 

Вот так помогло. smile Только вот что непонятно теперь: я убрал "-1":

Код

for(i = 0; i < Form1->Memo1->Lines->Count; i++)

Работает нормально т.е., перемещаются все строки. Но: если нумерация строк идёт с 0, то как получается, что обрабатывается всё количество строк в мемо1 (Memo1->Lines->Count), а не (Memo1->Lines->Count-1) ? Я в том смысле, что на Дельфи я бы написал:

Код

for i:=0 to memo1.lines.count-1 do
 begin
 ...
 end;

Или я чего-то не понимаю?...

Автор: nworm 5.2.2007, 00:15
Если хочешь как в Delphi, пиши 
Код

for(i = 0; i <= Form1->Memo1->Lines->Count-1; i++)

Автор: XPyCT 25.8.2007, 16:49
я почемуто пишу не Count а Cpacity
 rк примеру есть два мемо!
в первый мемо загоняем какой неить фаил
а потом мемо2 присваеваем построчно содержиме первого мемо
текст фаил лежит в папке проекта
Код

//----------------------------------------------Создание формы
void __fastcall TForm1::FormCreate(TObject *Sender)//при создании формы  загружается файл test.txt"
{
  Memo1->Clear();
    Memo1->Lines->LoadFromFile("test.txt");
}

//-----------------------------------------------
//-----------------------------------------------клик на кнопке
void __fastcall TForm1::Button1Click(TObject *Sender)
{
   int i;

    Memo2->Clear();

     Memo2->Lines->Capacity=Memo1->Lines->Capacity;

        for(i=0; i < Memo1->Lines->Capacity; i++)

           Memo2->Lines->Strings[i]=Memo2->Lines->Strings[i];
}
//-------------------------------------------------------------------------

не судите строго новичка

Автор: Rodman 25.8.2007, 18:04
Код

//----------------------------------------------Создание формы
void __fastcall TForm1::FormCreate(TObject *Sender)//при создании формы  загружается файл test.txt"
{
  Memo1->Clear();
    Memo1->Lines->LoadFromFile("test.txt");
}
//-----------------------------------------------
//-----------------------------------------------клик на кнопке
void __fastcall TForm1::Button1Click(TObject *Sender)
{
          Memo2->Text=Memo1->Text;
}

Автор: Romikgy 25.8.2007, 21:32
Цитата(Rodman @  25.8.2007,  17:04 Найти цитируемый пост)
 Memo2->Text=Memo2->Text;

имхо только так  smile 
 Memo2->Text=Memo1->Text;

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)