逐个字符读取文件,并将其字符存储到二维数组OCaML中

逐个字符读取文件,并将其字符存储到二维数组OCaML中,ocaml,ml,Ocaml,Ml,我有一些这种格式的测试文件。(N行,M列) 其中4我不会为您这样做,但以下是一些您可以使用的有用函数: val open_in : string -> in_channel 打开命名文件进行读取,并返回该文件上位于文件开头的新输入通道 然后,您可以创建一个循环(例如,使用递归函数),在该循环中,您将读取输入文件的每一行: val input_line : in_channel -> string 从给定的输入通道读取字符,直到遇到换行符。返回所有已读取字符的字符串,末尾不带换行符

我有一些这种格式的测试文件。(N行,M列)
其中
4我不会为您这样做,但以下是一些您可以使用的有用函数:

val open_in : string -> in_channel
打开命名文件进行读取,并返回该文件上位于文件开头的新输入通道

然后,您可以创建一个循环(例如,使用递归函数),在该循环中,您将读取输入文件的每一行:

val input_line : in_channel -> string
从给定的输入通道读取字符,直到遇到换行符。返回所有已读取字符的字符串,末尾不带换行符。如果在行的开头到达文件的结尾,则提升文件的结尾

如您所见,一旦到达文件末尾,将引发
End\u of_file
异常,因此程序的框架将被删除

let file_to_list filename = 
  let file = open_in filename in
  let rec fill_list acc =
    try
      let line = input_line file in ...
      (* here you should fill the list *)
    with End_of_file -> acc
  in fill_list []
一旦你得到这个列表,你就有了行的数量(列表的长度)和行的大小(行的长度),你就可以填充你的数组(并用合适的值初始化它)


另一个有用的方法是获取字符串的第个字符
n
s
只需写
s.[n]

thnx!我想我可以跳过将行插入列表中。当然,你可以使用
read\u char
而不是
read\u line
,但我会让你找到方法。这个函数可以在Pervasives模块中找到(请在Internet上浏览此项;-))
val input_line : in_channel -> string
let file_to_list filename = 
  let file = open_in filename in
  let rec fill_list acc =
    try
      let line = input_line file in ...
      (* here you should fill the list *)
    with End_of_file -> acc
  in fill_list []