Вы не предоставляете достаточно информации о возможных формах строк ввода, чтобы тщательно решить эту проблему.
Разумно предположить, что вам нужны 1-е, 3-е и 5-е «слова» (разделенные пробелами values) из строки.
let get_words =
let re = Str.regexp "[ \t]+" in
fun s ->
Str.split re s
let extract ic =
let rec loop accum =
match input_line ic with
| line ->
(match get_words line with
| w1 :: _ :: w3 :: _ :: w5 :: _ ->
loop ((w1, w3, w5) :: accum)
| _ -> loop accum
)
| exception End_of_file -> List.rev accum
in
loop []
Четвертое значение в строке выглядит довольно сложно. Если он может содержать встроенные пробелы, вам нужно будет более тщательно проанализировать каждую строку. (Например, вам может потребоваться поискать подходящие квадратные скобки. Но может ли значение также содержать скобки?)
(Вы говорите, что это было бы легко в C, но интересно подумать о том, как вы себе представляете * Код 1010 * будет вести себя при наличии очень длинных входных строк. Если вы правильно обработаете такие вещи, C, по моему опыту, станет намного сложнее. Каждая программа становится проблемой управления памятью.)