На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Rust
  
> Реализовать обработку строк циклом в цикле (в цикле в цикле...). , Borland C++ Builder v.6.0.
    Пусть есть некий массив, в котором есть строки в таком формате. Сами строки задают алгоритму способ их обработки.

    Нужно организовать правильную запись в файл: чтобы циклы обрабатывались как надо (циклы в цикле и т.д.).

    На текущий момент есть реализация "с циклами и обычными строками работает нормально" (он и выложен: обрабатывает данные хорошо). Можно ли его допилить здесь, чтобы он нормально циклы в цикле делал?

    Прикреплённый файлПрикреплённый файл_________________2.gif (16,61 Кбайт, скачиваний: 259)

    ExpandedWrap disabled
      //ВЫЗОВ Ф-ЦИИ ОБРАБОТКИ МАССИВА.
      for (int i=0; g_asData_Array[i][0]!="-1"; i++)
      {
              if (g_asData_Array[i][0].Pos(RadioButton_Cycle_Begin->Caption) != 0) i = iWrite_Block(i, 1, 1, asFile_Name); //Прыгнуть на нужную позицию после цикла.
              else iWrite_Block(i, 1, 1, asFile_Name); //Избавиться от лишнего прыжка на 1 позицию.
       
              ProgressBar_File->Position = (100 * i) / StringGrid_Blocks->RowCount;
      }
       
      //Ф-ЦИЯ ОБРАБОТКИ МАССИВА.
      int __fastcall TForm_Main::iWrite_Block(const int iBlock_Begin, int iBlock_Count, int iCycle_Count, const AnsiString asFile_Name)
      {
          int iBlocks_Maked = iBlock_Count; //Для циклов, чтобы понять, насколько сдвинуться вниз.
       
          Application->ProcessMessages();
          if (g_bCancel) return StringGrid_Blocks->RowCount;
       
          for (int i=iBlock_Begin; i<iBlock_Begin+iBlock_Count; i++)
          {
              //Запись данных (вырезано).
       
              //Вход в цикл.
              else if (g_asData_Array[i][0] == RadioButton_Cycle_Begin->Caption)
              {
                  int iEnds_To_Skip = 0; //Если цикл в цикле - нужно скорректировать по дальнему концу цикла.
       
                  iBlock_Count = 0;
       
                  iCycle_Count = slSplit(g_asData_Array[i][1], g_asSeparator)->Strings[1].ToInt();
       
                  while (iEnds_To_Skip == 0)
                  {
                      while (g_asData_Array[iBlock_Count+i][0] != RadioButton_Cycle_End->Caption)
                      {
                          if (g_asData_Array[iBlock_Count+i][0] == RadioButton_Cycle_Begin->Caption) iEnds_To_Skip++;
                          iBlock_Count++;
                      }
       
                      for (int j=0; j<iCycle_Count-1; j++) //*1.
                      {
                          iBlocks_Maked += iWrite_Block(iBlock_Begin+1, iBlock_Count-1, iCycle_Count, asFile_Name);
                      }
       
                      iEnds_To_Skip--;
                  }
       
      //*1 должно быть здесь?
              }
       
              ProgressBar_Block->Position = (100 * i) / (iBlock_Begin + iBlock_Count);
          }
       
          return iBlock_Begin+iBlock_Count;
      }
    Сообщение отредактировано: Сергей85 -
      @Moderator Прошу перенести в "Разовые заказы и подработка".
      Сообщение отредактировано: Сергей85 -
        Что, даже за деньги никто не может?
            Я все сам сделал давно.
            0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
            0 пользователей:


            Рейтинг@Mail.ru
            [ Script execution time: 0,0187 ]   [ 17 queries used ]   [ Generated: 30.05.24, 19:45 GMT ]