Импорт и анализ календарей в OCaml - PullRequest
0 голосов
/ 07 мая 2020

Я работаю над программой планирования / планирования в OCaml, и я хочу иметь возможность использовать файл iCal в качестве входных данных, но я не могу понять, как преобразовать файл в свой собственный тип календаря в OCaml. В идеале я хочу иметь возможность читать файл iCal так же, как вы можете читать файл json, используя Yo json. Есть идеи, как я могу sh это сделать?

1 Ответ

0 голосов
/ 08 мая 2020

Если вы говорите о формате ICalendar , тогда существует библиотека OCaml icalendar , которая может его прочитать. Вы можете установить его с помощью

opam install icalendar

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

open Format

let read filename =
  let buf = Buffer.create 4096 in
  let src = open_in filename in
  let rec loop () = loop (Buffer.add_channel buf src 4096) in
  try loop () with End_of_file -> close_in src; Buffer.contents buf

let main filename =
  match Icalendar.parse (read filename) with
  | Error failure ->
    eprintf "Failed to read file %s %s@\n%!" filename failure
  | Ok calendar ->
    printf "%a@\n%!" Icalendar.pp calendar

let () = main Sys.argv.(1)

Обратите внимание, что мне также пришлось написать функцию read, которая считывает весь файл в строку. Эта функция не является частью стандартной библиотеки, но обычно предоставляется другими библиотеками, например Base, Core, Batteries.

Для сборки программы создайте пустую папку, поместите код в файл, например , example.ml, а затем введите следующую команду в этой папке:

ocamlbuild -pkg icalendar example.native

Затем вы можете использовать построенный двоичный файл как

./example.native input.ics

, где input.ics - это пример ввода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...