rendered paste bodyfunction readBlock(sFilename) { // Проверяем, открыли ли мы уже этот файл if (!aOpenedFiles.contains(sFilename)) { // Читаем весь файл sFileContent = readEntireFile(sFilename); // Разбиваем файл на блоки по регулярному выражению и вложенными скобками выбираем блоки отсекая ведущие и завершающие переносы. В крайнем случае отсечение переносов можно вынести отдельным оператором aBlocks = sFileContent.getRegExpMatches('/(?<:<-STAT->|<-BREAK->)[\n\r]*(.*[^\n\r])[\n\r]*(?:<-END->|<-BREAK->)/'); // Сохраняем массив блоков (не целые стрки, а совпадения по внутренним скобкам в регулярке) aOpenedFiles.add(sFilename, aBlocks[1]); // Устанавливаем указатель на первый блок aPointers.add(sFilename, 0); } // Проверяем наличие блоков if (aOpenedFiles[sFilename].length == 0) { // Блоков нет, возвращаем пустую строку. return ''; } // Выбираем очередной блок sBlock = aOpenedFiles[sFilename][aPointers[sFilename]]; // Перемещаем указатель блока aPointers[sFilename]++; // Проверяем указатель блока и зацикливаем его if (aPointers[sFilename] == aOpenedFiles[sFilename].length) { aPointers[sFilename] = 0; } // Возвращаем блок return sBlock;}