在 OCaml 中导入和解析日历

Posted

技术标签:

【中文标题】在 OCaml 中导入和解析日历【英文标题】:Importing and parsing calendars in OCaml 【发布时间】:2020-08-23 02:56:55 【问题描述】:

我正在开发 OCaml 中的调度/计划程序,我希望能够使用 iCal 文件作为输入,但我不知道如何在 OCaml 中将文件解析为我自己的日历类型。理想情况下,我希望能够以与使用 Yojson 读取 json 文件相同的方式读取 iCal 文件。关于如何实现这一点的任何想法?

【问题讨论】:

【参考方案1】:

如果您谈论的是 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 是样本输入。

【讨论】:

以上是关于在 OCaml 中导入和解析日历的主要内容,如果未能解决你的问题,请参考以下文章

在 python lib 中导入和裁剪 jpeg 的快速方法

如何在 R 中导入和合并多个文件?

在 cassandra 中导入和导出模式

在 OpenGL 中导入和显示 .fbx 文件

在 Angular 中导入和使用 lodash 的正确方法

如何在Chrome中导入和导出密码