Ocaml 如何读取文件并将其写入其他文件

Ocaml 如何读取文件并将其写入其他文件,ocaml,Ocaml,我希望一切都好。此时,我计划读取一个文件,然后将其写入另一个文件。(相当于OCaml中的cp,在我继续操作文本之前。)目前在我的代码中,我正在使用读取文件,然后输出它。我还使用dune将文件构建为可执行文件。我的文件如下所示: (* example.ml file *) let read_filename = "example_1.ts" let filename = "example_2.ts" let () = let text read_filename = let ch

我希望一切都好。此时,我计划读取一个文件,然后将其写入另一个文件。(相当于OCaml中的
cp
,在我继续操作文本之前。)目前在我的代码中,我正在使用读取文件,然后输出它。我还使用
dune
将文件构建为可执行文件。我的文件如下所示:

(* example.ml file *) 
let read_filename = "example_1.ts"
let filename = "example_2.ts"

let () =

  let text read_filename =
    let chan = open_in read_filename in
    Std.input_list chan  

  let filename = filename in 
  let text = text in 
  Std.output_file ~filename ~text 
  (* normal exit: all channels are flushed and closed *)
当我使用
dune build example.bc
构建文件时,我收到以下错误:

File "example.ml", line 11, characters 2-5:
Error: Syntax error

我试图找出我做错了什么,但没有用。任何帮助都将不胜感激。多谢各位

当我读了你的代码后,我会注意到这些行

  let filename = filename in 
  let text = text in 
你为什么写这行?(*您可以安全地删除它*)

然后我发现你的语法错误是上面的一行,你忘记了

(* example.ml file *) 
let read_filename = "example_1.ts"
let filename = "example_2.ts"

let () =
  let text read_filename =
    let chan = open_in read_filename in
    Std.input_list chan
  in
    Std.output_file ~filename ~text 
  (* normal exit: all channels are flushed and closed *)
每个本地定义的规则必须在关键字中有一个


(*局部定义是let表达式*中的let)

注意:这仍然会在编译器中出错,但它正朝着正确的方向前进,这有助于我尝试实现的目标。