Как записать один файл из двух файлов в groovy (Jenkins)? - PullRequest
1 голос
/ 19 апреля 2020

У меня есть два * .hex-файла (могут обрабатываться как файлы ASCII), сгенерированные из сценария сборки конвейера Jenkinsfile groovy. После успешной сборки в рабочей области заданий находятся следующие файлы:

  1. a.hex
  2. b.hex

Мне нужно c .hex, это просто два a.hex и b.hex, склеенные вместе в одном файле.

В C это выглядит так:

static void mergeIntelHexFiles(const char* aFile, const char* bFile, const char* mergedFile)
{
  FILE* readFileA  = fopen(aFile, "r");
  FILE* readFileB = fopen(bFile, "r");
  if (   (NULL != readFileA  )
      && (NULL != readFileB ))
  {
    FILE* writeFile = fopen(mergedFile, "w");
    if (NULL != writeFile)
    {
      char lineBuffer[MAX_PATH_LEN];

      while (NULL != fgets(lineBuffer, MAX_PATH_LEN, readFileA ))
      {
        if (NULL == strstr(lineBuffer, ":00000001FF"))
        { // it is not the last line of the file
          fputs(lineBuffer, writeFile); // copy the line without modification
        }
      }

      while (NULL != fgets(lineBuffer, MAX_PATH_LEN, readFileB ))
      {
        fputs(lineBuffer, writeFile); // copy the line without modification
      }

      fclose(writeFile);
    }
    fclose(readFileA);
    fclose(readFileB);
  }
}

Это копирует только каждый строка a.hex в c .hex и затем копирует каждую строку b.hex в c .hex.

Но в Jenkins Groovy я понятия не имею, как это сделать ...

Я мог найти документацию только для простых примеров, таких как this

Так что вопрос в том, как объединить два файла в один в groovy?

1 Ответ

1 голос
/ 19 апреля 2020

Groovy имеет несколько хороших перегруженных методов в классе File, а также оператор «<<» перегрузки, который позволяет добавлять содержимое в файл. Ваш вариант использования легко решается одной строкой кода: </p>

new File("c.hex") <<  new File("a.hex").text <<  new File("b.hex").text

В своем комментарии вы спрашиваете, как объединить файлы и удалить последнюю строку a.hex. Требуется немного больше кода, но все еще легко выполнить sh:

def cHex = new File("c.hex")
def lines = new File("a.hex").readLines()
lines.eachWithIndex { String line, int idx -> if(idx < lines.size() - 1) cHex << line << '\n' }
cHex << new File("b.hex").text
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...