Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не понятная ошибка, Работа с строками 
V
    Опции темы
Sputnick
Дата 30.5.2008, 14:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 12.5.2008

Репутация: нет
Всего: нет



Всем привет! Есть задача, в таблице в поле Acc_cr (счет)  необходимо выполнить проверку, а именно если счет начинается не на ноль, то вставляем в начало ноль. Это реализуется следующим кодом:

Код

while (!TableNew->Eof)
 {

   AnsiString acc=TableNew->FieldByName("Acc_cr")->AsString;
   AnsiString character1 = acc[1];



   if(character1 !=0){acc.Insert(0,1);}



   TableNew->Edit();
   TableNew->FieldByName("Acc_cr")->AsString=acc;
   TableNew->Post();
   TableNew->Next();
 }


Выше приведенный код отрабатывает.
Но мне надо проверять еще последние 2 символа:

Код

while (!TableNew->Eof)
 {

   AnsiString acc=TableNew->FieldByName("Acc_cr")->AsString;
   AnsiString character1 = acc[1];
   AnsiString character9 = acc[9];
   AnsiString character10 = acc[10];


   if(character1 !=0){acc.Insert(0,1);}
   if(character9 !=0){acc.Insert(0,9);}
   if(character10 !=0){acc.Insert(0,10);}

   TableNew->Edit();
   TableNew->FieldByName("Acc_cr")->AsString=acc;
   TableNew->Post();
   TableNew->Next();


очень странно, но этот код не отрабатывает(( Выдает следующее:

Project raised exeption class ERangeError with message.
и показывает мне с заголовочного файла distring.h следующий код:

    char& __fastcall operator [](const int idx)
    {
      ThrowIfOutOfRange(idx);   // Should Range-checking be optional to avoid overhead ??
      Unique();                 // Ensure we're not ref-counted
      return Data[idx-1];
    }

Таблица дбф, в свойстве таблицы выставил ttFoxPro и с таблой работаю напрямую, без альясов.
Я может что то не учитываю? Кто знает подскажите

Это сообщение отредактировал(а) Sputnick - 30.5.2008, 14:20
PM MAIL   Вверх
Rififi
Дата 30.5.2008, 14:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1254
Регистрация: 9.3.2008

Репутация: 1
Всего: 36



Цитата(Sputnick @  30.5.2008,  14:17 Найти цитируемый пост)
очень странно, но этот код не отрабатывает((

ничего странного нет, всё как раз очевидно. функция с говорящим именем ThrowIfOutOfRange бросает исключение, если индекс выходит за пределы строки. код кривой - в данном случае именно это и происходит.
для изменения последних символов надо сначала узнать длину строки (и убедиться, что подобное изменение вообще возможно)

Код
const size_t len = arr.GetLengh(); // или как там у вас в AnsiString получить длину строки
if (len >= 2) // если есть что проверять...
{
    if (acc[len-1])
        acc[len-1].Insert(...);
    if (acc[len-2])
        acc[len-2].Insert(...);
}

и есть подозрение, что в строку предпологается вставлять не код 0, а символ '0', что не одно и тоже.
PM MAIL   Вверх
Sputnick
Дата 30.5.2008, 16:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 12.5.2008

Репутация: нет
Всего: нет



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

а по поводу символа, пробовал и так '0' и так 0 в обоих вариантах работает.
так как  character1 тип AnsiString имеет, то будет работать и с 0

всем спасибо темма закрыта)

Добавлено через 10 минут и 19 секунд
закрыта
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0474 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.