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