Отвечая @yosukesabia, вы, вероятно, захотите использовать стандартный подход чтения строки, а затем посмотреть на строку, чтобы решить, что вы только что прочитали, а затем на основе этого выполнить внутреннее чтение из строки.
Но есть также проблема того, как хранить данные после того, как вы их прочитали ...
Поскольку у вас есть как неизвестное количество ячеек, так и неизвестное количество элементов данных на ячейку, самый элегантный подход заключается в создании типа связанного списка для каждого. Чтобы иметь список ячеек, и когда вы встретите новую ячейку, добавьте в этот список. И сам тип ячейки содержит список типа данных ячейки. Когда вы встречаете новый элемент данных, вы добавляете в этот список. Связанный список, вероятно, является лучшим способом обработки неизвестного количества элементов. Недавний вопрос касался связанных списков в Fortran: Как я могу реализовать связанный список в Fortran 2003-2008 . В противном случае вы можете прочитать файл, перемотать назад или вернуться назад и выделить массивы правильного размера, а затем перечитать. Примитивный способ состоит в том, чтобы иметь массивы фиксированной длины типов, рассчитанных на максимально возможное количество ячеек, и максимально возможное количество элементов данных на ячейку. Просто, но очень не элегантно. И подвержен ошибкам, если ваше предположение о максимальном количестве неверно.