C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Find in TString
** Monster
Отправлено: 17.11.2003, 13:41


Не зарегистрирован







Почему это не работает?
После второй отличающейся строки i больше не прибовляется и цикл повторяется бесконечно.

CODE

AnsiString s;
for(int i=0;i<c->Count;i++)
       {
       s=c->Strings[i];
       if(infile->Find(s,i))
       ShowMessage("Est takaya stroka");
       else
       ShowMessage("Naidena Novaya stroka"+ s);
       }


Отредактировано Admin — 17/11/2003, 15:00
Георгий
Отправлено: 17.11.2003, 18:11


Почетный железнодорожник

Группа: Модератор
Сообщений: 874



QUOTE
Find(s,i)

тебе в переменную i записывают индекс строки s, если она найдена, но i у тебя используется как счётчик цикла, поэтому ,если искомая строка в inifile имеет индекс = 2, а i=3, то в переменную i будет записано число 2, которое будет увеличено на 1 т.е. i=3 и всё повторится снова.
Я не знаю зачем ты счётчик в метод find передаёшь, но думаю, что вот так будет правильно:
CODE
AnsiString s;
for(int i=0;i<c->Count;i++)
      {
      int temp;
      s=c->Strings[i];
      if(infile->Find(s,temp))
      ShowMessage("Est takaya stroka");
      else
      ShowMessage("Naidena Novaya stroka"+ s);
      }
** Monster
Отправлено: 19.11.2003, 12:11


Не зарегистрирован







Сделал так.

for(int i=0;iCount;i++)
{
c->Sort();
infile->Sort();
s=c->Strings[i];
if(infile->IndexOf(s)==-1)
{
AnsiString namefile="namefile"+IntToStr(a);
infile->Add(s);
infile->SaveToFile("rrr");
i=0;
Ini->WriteString(nameprofile,namefile,s);
a++;
}
else {
infile->Add(s);
infile->SaveToFile("rrr");
i=0;
}
}

Немного вроде напортачено, но зато работает. smile.gif

Вернуться в Вопросы программирования в C++Builder