Пятница, 08 Ноября 2024, 21:52

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Поиск и замена текста в файле
gil9redДата: Суббота, 28 Января 2012, 21:44 | Сообщение # 1
частый гость
Сейчас нет на сайте
Здравствуйте! Позвольте я расскажу о своем конфузе: захотелось мне написать функцию, которая считывает из файла инфомацию заключенную в блоках. Делает она так: в файле есть блоки, начинаются они Begin_, заканчиваются End_, указываем в функции название блока, и функция ищет такой, если найдет, то все что есть между Begin_ и End_ записывается в строку AnsiString. Но я не могу придумать, как написать функцию, которая бы искала блоки, и заменяла информацию внутри блоков. Пытался изменить алгоритм используя функцию считывания, но не получается, помогите пожалуйста с алгоритмом поиска и замены данных))

вот код функции считывания:
Code

   String ReadFile(String FileNamePath, String NameBlock)
   {
    String BlockBeginRead = "Begin_";
             BlockBeginRead+= NameBlock;
    String BlockEndRead  = "End_";
              BlockEndRead += NameBlock;
    String BlockBeginComment = "!!";
    String BlockEndComment   = ";";

    BOOL ReadAccess = true;
    BOOL BeginBlock = false;

    char bufer[256];
    String text;
    String BufferBlock = "";

    ifstream READ_FILE;

    READ_FILE.open(FileNamePath.c_str());

    while(!READ_FILE.eof())
    {
  READ_FILE >> bufer;
  text = bufer;
  if(text == BlockBeginComment)
  {
   ReadAccess = FALSE;
   continue;
  }
  if(text == BlockEndComment)
  {
   ReadAccess = TRUE;
   continue;
  }
  if(text == BlockBeginRead)
  {
   BeginBlock = true;
   continue;
  }
  if(text == BlockEndRead)
  {
   break;
  }
  if(BeginBlock && ReadAccess)
  {
   BufferBlock += text;
   BufferBlock += " ";
  }
    }
    READ_FILE.close();

    BufferBlock.SetLength(BufferBlock.Length() - 1);
  return BufferBlock;
}


В программировании нет совершенства, но к нему нужно стремиться. ©
0x90Дата: Суббота, 28 Января 2012, 22:16 | Сообщение # 2
участник
Сейчас нет на сайте
Так и не понял что тебе нужно. Ты хочешь некоторый блок и внутри него вставить тескст? Покажи пример входного файла и выходного файла который должен получится.
gil9redДата: Воскресенье, 29 Января 2012, 01:49 | Сообщение # 3
частый гость
Сейчас нет на сайте
Да, как такие блоки начинаются я писал

Пример:

Code

test.txt
    Begin_VolumeTrackMusic_PosLeft
     479
    End_VolumeTrackMusic_PosLeft

    Begin_VolumeTrackMusic_PosTop
     48
    End_VolumeTrackMusic_PosTop

Если воспользоваться моей функцией и впервом параметре вписать test.txt, а во втором параметре вписать VolumeTrackMusic_PosLeft,
то функция вернут значение "479", а мне нужно что бы можно было указав имя блока заменить информацию в нем.

Добавлено (29.01.2012, 01:49)
---------------------------------------------

Я придумал алгоритм, просто я не туда глядел)
алгоритм еще не доработан, примерно такой:

Code

void WriteFile(String FileNamePath, String NameBlock, String ReplacementText)
{
   String BeginBlock = "Begin_";
             BeginBlock+= NameBlock;
   HANDLE t = Form1->Handle;
     
   TMemo *BuferFile = new TMemo(t);

   // загружаем в мемо содержимое файла
   BuferFile->Lines->LoadFromFile(FileNamePath);

// проверяем каждую строку
   for(int i = 0; i < BuferFile->Lines->Count; i++)
   {
    // получаем строку
    String bufer = BuferFile->Lines->Strings[i];
    // если нашли
    if(bufer.Pos(BeginBlock))
    {
     BuferFile->Lines->Delete(i + 1);
     BuferFile->Lines->Insert(i + 1, ReplacementText);
     BuferFile->Lines->SaveToFile(FileNamePath);
     BuferFile->~TMemo();
     break;
    }
   }
}

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

этот алгоритм я делал только для своей задачи, мне нужно была замена одной строки, после начала блока

Думаю тему можно закрыть happy


В программировании нет совершенства, но к нему нужно стремиться. ©

Сообщение отредактировал gil9red - Воскресенье, 29 Января 2012, 01:50
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг